Страницы: 1
RSS
CheckBox на UserForm, Подсчет CheckBox на UserForm
 
Добрый день знатоки 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 спасибо количество считает, остался вопрос с циклами
 
Цитата
остался вопрос с циклами
Цитата
как связать цикл с CheckBox на UserForm
Расшифруйте, не понимаю... :(
 
Цитата
Расшифруйте, не понимаю...
anvg вот то же самое только с учетом, что CheckBox находятся на UserForm, а не как в указанном примере (на активном листе):
Код
Dim li As Long 
For li = 1 To 5 
if ActiveSheet.DrawingObjects("CheckBox" & li).Object.Value = 1 then 
'что-то там делаем 
End If 
Next li
Изменено: Aleksey - 04.10.2013 13:49:13
 
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
Изменено: Aleksey - 04.10.2013 13:50:32
 
Тогда замените
vCount = vCount + 1
на
Код
If pControl.Value Then
    'Чего-то там делаем
End If
 
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
Изменено: Aleksey - 04.10.2013 13:51:08
 
Ребят еще один вопрос по этой же теме
Пытаюсь по нажатию кнопки очистить все CheckBox на Форме по средствам:
Код
Me.Controls("CheckBox" & i).Value = Falce
однако на всех CheckBox появляются тусклые галочки, значения Value и BoundValue принимается равным значению Null вместо Falce.

Не подскажите как это исправить?
Изменено: Aleksey - 04.10.2013 13:56:40
 
Код
Private Sub CommandButton1_Click()
Dim x As Control
    For Each x In Me.Controls
        If TypeOf x Is MSForms.CheckBox Then
            x.Value = 0
        End If
    Next
End Sub
 
Falce - нет такого. Есть False
 
Цитата
Falce - нет такого. Есть False
Действительно ошибка была в этом((( В итоге работает и с False и с 0.
Большое спасибо, сам бы в жизни не нашел, т.к. обычно в случае неправильной команды VBA ругается, а тут даже не пискнул.
 
чтобы пискнул -используйте  Option Explicit в начале модуля.
Страницы: 1
Читают тему
Наверх