VBA:将通用对象指定给复选框变量
我的代码在Excel工作簿中当前工作表中的所有现有对象之间循环。我希望它找到一个特定的复选框(基于传递给子对象的名称),它是始终复选框,并将其分配给类型为CheckBox的变量 注意:其他对象并非都是复选框,因此为通用对象类型 调用sub的示例代码,显示名称示例: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
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