我有UserForm4,它包含CheckBox1 ... 19以及OptionButton1 ... 3,以及TextBox1,CommandButton1,2。
当OptionButton 1 = True时,我想遍历所有CheckBox并将每个CheckBox设置为True。
我得到的错误是“找不到对象”,i = 21,n = 23.当我只有19个CheckBox时,它们如何变得那么高?
谢谢!
Private Sub OptionButton1_Click()
Dim ctrl As Control
Dim i As Integer
Dim n As Integer
n = 0
For Each ctrl In UserForm4.Controls
If TypeOf ctrl Is MSForms.CheckBox Then
n = n + 1
End If
Next ctrl
For i = 1 To n
If UserForm4.Controls("CheckBox" & i) = False Then
UserForm4.Controls("CheckBox" & i) = True
End If
Next i
End Sub
答案 0 :(得分:1)
您最初是否创建了超过19个并删除了一些?每个VBA对象都有一个唯一的名称。按照你的方式这样做可能会导致各种各样的问题。
例如,如果您创建10个CheckBox并删除其中的8个,则其余两个可能被命名为Checkbox8和Checkbox9。所以你的循环根本不会碰到它们。
另外,为什么不做以下事情:
Private Sub OptionButton1_Click()
Dim ctrl As Control
Dim i As Integer
Dim n As Integer
n = 0
For Each ctrl In UserForm4.Controls
'this will make your problem really obvious
debug.print ctrl.name
If TypeOf ctrl Is MSForms.CheckBox Then
ctrl.value = True
End If
Next ctrl
End Sub