如何遍历UserForm上的CheckBoxes?

tnu*_*uis 3 excel vba

通过选择一个OptionButton,我希望活动表单上的所有复选框都取消选中并取消选中。

我可以使用For Each循环取消选择它,但这对于取消选中这些框不起作用。我得到错误:

chB.Value =对象变量或未设置带块变量

Private Sub optB_9201_Click()

Dim ctrl As Control
Dim chB As CheckBox

If Me.optB_9201.Value = True _
  And Me.optB_9251.Value = False _
  And Me.optB_9301.Value = False Then

    Me.img9301_main.Visible = True
    Me.frM9301_View.Caption = "Du har valgt CLX-9201NA med følgende konfigurasjon:"
    Me.frm9301_Equipment.Enabled = True

    For Each ctrl In Me.frm9301_Equipment.Controls
        ctrl.Enabled = False
        chB.Value = False
    Next ctrl

    Me.frM9301_Stand.Enabled = True

    For Each ctrl In Me.frM9301_Stand.Controls
        ctrl.Enabled = True
    Next ctrl

End If

End Sub
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题?

或者:

可能在UserForm上发生更改事件,该事件指出如果CheckBox为Enabled = False,则Value = False。

这样,我不必在每个OptionButton上都放入For Each循环。我尝试了UserForm_Change Sub和UserForm_Click,但似乎没有任何效果。

Dav*_*ens 6

您永远不会分配任何东西chb(而且我不确定您是否需要使用该变量)。您可以这样做:

For Each ctrl In Me.frm9301_Equipment.Controls
    ctrl.Enabled = False
    ctrl.Value = False
Next ctrl
Run Code Online (Sandbox Code Playgroud)

仅当所有控件均为CheckBoxes时,此方法才有效。如果不是这种情况,则只需添加一些if / then逻辑:

For Each ctrl In Me.frm9301_Equipment.Controls
    If TypeName(ctrl) = "CheckBox" Then
        ctrl.Enabled = False
        ctrl.Value = False
    End If
Next ctrl
Run Code Online (Sandbox Code Playgroud)