VBA:将通用OLEObject分配给CheckBox变量
问题描述:
我的代码循环遍历Excel工作簿中当前表单中的所有现有OLEObjects。我希望它找到一个特定的(基于传递给子的名称),它是总是一个CheckBox并将其分配给一个CheckBox类型的变量。VBA:将通用OLEObject分配给CheckBox变量
注意:其他对象不是全部复选框,因此是通用的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
我发现了一个非常类似的问题在:Excel VBA: how to cast a generic control object into a ComboBox object?但它是指以形成控件(不是ActiveX控件)。我尝试了答案中给出的方法,看它是否可以在两种控制类型之间转移,但没有成功。
我想这样做类似于我指的是这个问题的提问者的理由 - 我不能使用像CheckBox.Value方法与通用OLEOBJECT变量。
我也尝试使用OLEObject.progID方法来确保o
是复选框对象。尝试Set cb = o
时遇到的错误是类型不匹配。
答
当作为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
答
我找不到(到目前为止)如何将它分配给CheckBox
,我发现如何将它分配给OLEObject
变量(如果有帮助的话)。
Sub HandleCheckBoxClick(nm As String)
Dim o As OLEObject
Dim CB As CheckBox
Dim oleObj As OLEObject
' loop though all OLEObjects in "Sheet2" >> modify to your sheet name
For Each o In Sheets("Sheet2").OLEObjects
If TypeName(o.Object) = "CheckBox" Then
Debug.Print o.Name
' if you have more then 1 CheckBox
If o.Name = nm Then
Set oleObj = o
' Set CB = o.Select
End If
End If
Next o
' just to test the options with OLEObject variable
With t
t.Top = 100
If t.Object.Value = True Then
MsgBox "CheckBoX " & nm & " is selected"
Else
MsgBox "CheckBoX " & nm & " is not selected"
End If
End With
End Sub