如何在UserForm上循环CheckBoxes?

时间:2014-06-14 15:16:25

标签: excel vba

通过选择OptionButton,我希望活动表单上的所有CheckBox都取消选择AND UNCHECK。

我可以使用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

如何解决这个问题?

可替换地:

是否可以在UserForm上有一个更改事件,表明如果CheckBox为Enabled = False则Value = False。

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

1 个答案:

答案 0 :(得分:5)

您永远不会向chb分配任何内容(我不确定您是否需要使用该变量)。你可以这样做:

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

这仅适用于所有控件是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