VBA:将通用对象指定给复选框变量

VBA:将通用对象指定给复选框变量,vba,checkbox,activex,controls,ole,Vba,Checkbox,Activex,Controls,Ole,我的代码在Excel工作簿中当前工作表中的所有现有对象之间循环。我希望它找到一个特定的复选框(基于传递给子对象的名称),它是始终复选框,并将其分配给类型为CheckBox的变量 注意:其他对象并非都是复选框,因此为通用对象类型 调用sub的示例代码,显示名称示例: HandleCheckBoxClick("chkAddSummary") 查找此特定对象的子对象: Sub HandleCheckBoxClick(nm As String) Dim o As OLEObject

我的代码在Excel工作簿中当前工作表中的所有现有对象之间循环。我希望它找到一个特定的复选框(基于传递给子对象的名称),它是始终复选框,并将其分配给类型为CheckBox的变量

注意:其他对象并非都是复选框,因此为通用对象类型

调用sub的示例代码,显示名称示例:

HandleCheckBoxClick("chkAddSummary")
查找此特定对象的子对象:

Sub HandleCheckBoxClick(nm As String)

    Dim o As OLEObject
    Dim cb As CheckBox

    For Each o In Me.OLEObjects
        If o.name = nm Then
            Set cb = o
        End If
    Next o

End Sub
我在上发现了一个非常类似的问题:但它指的是表单控件(不是ActiveX控件)。我尝试了答案中给出的方法,看看它是否可以在两种控制类型之间转移,但没有成功

我想这样做的原因类似于我提到的问题的提问者——我不能使用像CheckBox.Value这样的方法和通用的OLEObject变量

我还尝试使用OLEObject.progID方法来确保
o
是复选框对象。我在尝试设置cb=o时遇到的错误是类型不匹配。

我(到目前为止)找不到如何将其分配给
复选框,我找到了如何将其分配给
OLEObject
变量(如果这对您有帮助的话)


当声明为
MSForms.CheckBox
时,应该可以分配
o.Object

Sub test()
    HandleCheckBoxClick "chkAddSummary"
End Sub

Sub HandleCheckBoxClick(nm As String)

    Dim o As OLEObject
    Dim CB As MSForms.CheckBox

    For Each o In Me.OLEObjects
        If o.Name = nm Then
            Set CB = o.Object
        End If
    Next o

End Sub

这对我获得复选框状态起了作用

Dim checkBox1 As Object
Set checkBox1 = Sheet1.OLEObjects("CheckBox1").Object
MsgBox checkBox1.Value
Dim checkBox1 As Object
Set checkBox1 = Sheet1.OLEObjects("CheckBox1").Object
MsgBox checkBox1.Value