VBA excel更改多个复选框的值

时间:2017-10-09 12:24:23

标签: excel vba excel-vba checkbox activex

我有一大堆250个ActiveX复选框,我希望将所有值从检查更改为未检查,是否有办法将其放入宏中?

复选框名称只是Checkbox3到Checkbox253

1 个答案:

答案 0 :(得分:2)

一种简单的方法:

Private Sub UnchkAllBox()
    For i = 3 to 253
        Controls("Checkbox" & i).Value = False
    Next i
End Sub

通过这种方式,复选框的名称非常重要。只有按顺序命名复选框才能使用它。

其他方式:

Private Sub UnchkAllBox2()
    Dim Ctrl As Control
    For Each Ctrl In Me.Controls
        If TypeName(Ctrl) = "CheckBox" Then Ctrl.Value = False
    Next Ctrl
End Sub

在这种情况下,您不必担心这些名字。但是,它会取消选中表单中的所有复选框。

提到的两种方法都假设所有复选框都放在用户表单中。对于工作表中的复选框,excel将它们存储在OLEObjects集合中而不是控件中。因此,代码应该重写如下。

Private Sub UnChkAllBox()
    For i = 1 To 5
        OLEObjects("CheckBox" & i).Object.Value = False
    Next i
End Sub

Private Sub UnChkAllBox2()
    Dim Obj As OLEObject
    For Each Obj In Me.OLEObjects
        If TypeOf Obj.Object Is MSForms.CheckBox Then Obj.Object.Value = False
    Next Obj
End Sub