Добрый день знатоки Excel и VBA! Прошу помощи в VBA. а именно есть UserForm на которой находится n-ое количество CheckBox и разные другие элементы. В настоящий момент макрос по нажатию кнопки имеет огромный вид, хочу его оптимизировать: 1. подскажите как подсчитать количество CheckBox (в независимости от их состояния True/Falce) на UserForm. 2. как связать цикл с CheckBox на UserForm
Нашел похожий пример в этой теме, но там учитываются CheckBox на активном лесте:
Код
Dim li As Long
For li = 1 To 5
if ActiveSheet.DrawingObjects("CheckBox" & li).Object.Value = 1 then
'что-то там делаем
End If
Next li
Private Sub CommandButton1_Click()
Dim pControl As MSForms.Control, vCount As Long
For Each pControl In Me.Controls
If TypeOf pControl Is MSForms.CheckBox Then
vCount = vCount + 1
End If
Next
MsgBox "Check box count is " & CStr(vCount)
End Sub
anvg с учетом вашего примера должно быть как то так:
Код
Private Sub CommandButton1_Click()
Dim pControl As MSForms.Control, vCount As Long
Dim li As Long
For Each pControl In Me.Controls
If TypeOf pControl Is MSForms.CheckBox Then
vCount = vCount + 1
End If
Next
For li = 1 To vCount
If ActiveSheet.DrawingObjects("CheckBox" & li).Object.Value = 1 then
'что-то там делаем
End If
Next li
End Sub
anvg спасибо. Пытаюсь разобраться Немного все таки подстроил под свои задачи, выкладываю вдруг кому нить пригодится:
Код
Private Sub CommandButton1_Click()
Dim pControl As MSForms.Control, Chet As Long
For Each pControl In Me.Controls 'счет CheckBox на форме
If TypeOf pControl Is MSForms.CheckBox Then
Chet = Chet + 1
End If
Next
'MsgBox "Всего " & CStr(Chet) & " CheckBox" ' отобразить количество CheckBox
For i = 1 To Chet
If Me.Controls("CheckBox" & i).Value = True Then 'если CheckBox на форме активный то
'делаем что то
End If
Next i
End Sub
Действительно ошибка была в этом((( В итоге работает и с False и с 0. Большое спасибо, сам бы в жизни не нашел, т.к. обычно в случае неправильной команды VBA ругается, а тут даже не пискнул.