2016-09-08 5 views
1

Mein Code durchläuft alle vorhandenen OLEObjects innerhalb des aktuellen Arbeitsblatts in einer Excel-Arbeitsmappe. Ich möchte, dass es eine bestimmte (basierend auf dem Namen an den Sub), der immer ist, eine CheckBox finden und es einer Variablen vom Typ CheckBox zuweisen.VBA: Weisen Sie einer CheckBox-Variablen ein generisches OLEObject zu

Hinweis: Die anderen Objekte sind nicht alle Checkboxen, daher der generische OLEObject-Typ.

Beispiel-Code, der Unter nennt, Beispiel Name zeigt:

HandleCheckBoxClick("chkAddSummary") 

Unter die für dieses spezielle Objekt sieht:

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 

ich eine sehr ähnliche Frage gefunden: Excel VBA: how to cast a generic control object into a ComboBox object? aber es bezieht sich Formularsteuerelemente (nicht ActiveX-Steuerelemente). Ich versuchte die Methode, die in der Antwort gegeben wurde, um zu sehen, ob es zwischen den zwei Kontrolltypen übertragbar war, hatte aber keinen Erfolg.

Der Grund, warum ich dies tun möchte, ist ähnlich dem Fragesteller der Frage, die ich verweise - ich kann Methoden wie CheckBox.Value nicht mit einer generischen OLEObject-Variable verwenden.

Ich habe auch versucht, die OLEObject.progID-Methode zu verwenden, um sicherzustellen, o ist ein Checkbox-Objekt. Der Fehler, den ich bekomme, wenn ich versuche, Set cb = o ist eine Art Mismatch.

Antwort

1

Wenn sie als MSForms.CheckBox erklärt sollte es dann möglich sein, o.Object zuweisen.

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 
0

Ich konnte (bis jetzt) ​​nicht finden, wie man es einer CheckBox zuweist, fand ich, wie man es einer OLEObject Variable zuweist (wenn dir das hilft).

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 
Verwandte Themen