2017-01-27 2 views
2

Я перебираю несколько строк, и мне нужно знать, проверяется ли CheckBox в каждой строке или нет, но я не знаю имя CheckBox. Ниже код только для иллюстрации проблемы:VBA - обратитесь к CheckBox с адреса ячейки

Sub Checkboxes() 

Dim ws As Worksheet 
Set ws = Sheets("Input Data") 
Dim Switch As Boolean 

For i = 4 To 8 
    Switch = ws.Cells(i, 11).CheckboxValue 
    MsgBox Switch 
Next i 


End Sub 

Для создания флажков я сделал следующее:

  1. Создать галку
  2. поместить его в клетку
  3. Copy ниже в та же колонна

Я предполагаю, что код должен быть полностью противоположным:

CheckBox1.LinkedCell 
+1

Во-первых, ваш код зацикливается через колонки не строк и во-вторых флажки, созданные на вкладке разработчиков являются отдельные объекты, которые не подключены к планшетным клеток – Aeneas

+0

Спасибо за заметив ошибку цикла. Для вашего второго пункта: можете ли вы предложить обходной путь? – Trenera

ответ

0

Это хороший обходной путь. Код связывает все CheckBoxes с ячейкой, в которой они находятся, и дает им логическое значение (TRUE/FALSE). Для внешнего вида я использовал «Number Formating», который делает текст «TRUE/FALSE» невидимым. Все, что вам нужно сделать, это вызвать функцию с листом (где CheckBoxes) в качестве входного. Идея пришла из Aeneas

Public Function Link_Checkboxes_To_Cells(ws As Worksheet) 

'This function is linking the checkboxes to the cells that they are in, so that the value of the cell becomes TRUE/FALSE when using the checkbox within. 
'Meanwhile, I have manually made the text invisible in the cells with checkboxes, using the following method: 
' https://support.office.com/en-us/article/Hide-or-display-cell-values-c94b3493-7762-4a53-8461-fb5cd9f05c33#bm1 
' Number Type ---> Custom --> Then type ";;;" (without the quotes) and OK 

Dim chk As CheckBox 

For Each chk In ws.Checkboxes 
    With chk 
     .LinkedCell = _ 
     .TopLeftCell.Offset(0, 0).Address 
    End With 
Next chk 

End Function 
1

Try ....

Sub Checkboxes() 

    Dim ws As Worksheet 
    Set ws = Sheets("Input Data") 
    Dim Switch As Boolean 

    For Each cb In ws.Checkboxes 
     If cb.Value = 1 Then 
      Switch = True 
     Else 
      Switch = False 
     End If 

     MsgBox cb.Name & " Value= " & Switch 

    Next cb 

End Sub 
+0

Спасибо за ответ! К сожалению, это не помогло бы моему делу, поскольку мне нужно относиться к строкам, поэтому я старую школу и использую 0 и 1. – Trenera

+0

Взгляните на это ..... http://blog.contextures.com/archives/2014/01/14/click-a-cell-to-check-yes-or-no/ – Aeneas

 Смежные вопросы

  • Нет связанных вопросов^_^