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