通过CheckBoxes结束For / Next循环时出错

时间:2013-09-23 19:42:11

标签: vba

我有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

1 个答案:

答案 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