habe in einem Tabellenblatt einige ActiveX-Checkboxen, die Daten-Gruppen für Diagramme ein- und ausblenden.
Jede neue Checkbox erhält immer wieder den selben Code, wobei sich eigentlich immer nur die 2 Variablen "CheckboxNumber" und "FirstColumnGroup" ändern:
Private Sub CheckBox1_Click()
Dim FirstColumnGroup As String, CheckboxNumber As Long
CheckboxNumber = 1
FirstColumnGroup = ActiveSheet.Range("NameDerErstenSpalteDerGruppe").Value
ToggleGroups CheckboxNumber, FirstColumnGroup
End Sub
Ich würde gerne wissen, wie man den Namen der Checkbox (CheckBox1) bzw. nur die eigentliche Ziffer auslesen kann OHNE jedes mal den Namen anzupassen?CheckBox1.Name ist damit nicht gemeint, da ich hier jedes mal ebenfalls anpassen müsste....da ist die momentane Zuweisung weniger Aufwand.
Alle Varianten im Netz haben bei mir bis jetzt nicht funktioniert.
Bei "ActiveControl.Value" bzw. "ActiveControl.Object.Value" sagt er mir "Variable nicht definiert."
Aufgerufen wird dann der eigentliche "Toggle" mit folgendem Code:
Private Sub ToggleGroups(CheckboxNumber As Long, FirstColumnGroup As String)
Application.ExecuteExcel4Macro "SHOW.DETAIL(2," & FirstColumnGroup & "," & IIf(OLEObjects("CheckBox" & CheckboxNumber).Object.Value, "True", "False") & ")"
ActiveSheet.Range("A1").Select
End Sub
Ich würde ebenfalls gerne wissen, ob der obige "Toggle"-Code inkl. Checkbox-Subs irgendwie vereinfacht werden kann (z. B. in einer Case-Abfrage)?Je mehr Checkboxen dazu kommen, umso mehr müssen die Subs kopiert und angepasst werden....der einzige eigentliche Mehrwert dabei ist ja nur jedes Mal der "NameDerGruppe".
Bin leider kein VBA-Experte...aber würde das nicht über eine Case-Schleife irgendwie funktioneren?
Sinnbildlich, wie folgt angedeutet:
"Auslesen des Namen der auslösenden Checkbox und extrahieren der Ziffer"
"Anhand der Ziffer Anwahl des nachfolgend definierten Case i"
For i = 1 to 100
Case 1
n = "NameDerErstenSpalteDerGruppe1"
Case 2
n = "NameDerErstenSpalteDerGruppe2"
Next
Application.ExecuteExcel4Macro "SHOW.DETAIL(2," & n & "," & IIf(OLEObjects("CheckBox" & i).Object.Value, "True", "False") & ")"
ActiveSheet.Range("A1").Select
Leider fehlen mir die Infos, wie das Ganze "in Realität" mit Verlinkung zu den Checkboxen eleganter umgesetzt werden müsste.Über Hilfe wäre ich sehr dankbar.
Grüße
Mathias