Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CheckBox
BildScreenshot zu CheckBox CheckBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

VBA-Code .Value u.A. aus Variablen bilden

Betrifft: VBA-Code .Value u.A. aus Variablen bilden von: Brandon Quest
Geschrieben am: 14.08.2014 22:01:03

Guten Abend,

ich versuche als Anfänger seit einigen Tagen eine komplexer
gestaltete Mappe/Idee umzusetzen und habe mich seit zwei Abenden an
Problemen festgefressen, deren Wurzel das Zuweisen von Werten an Variablen ist.

Meinen gesamten VBA-Text habe ich im Tabellenblattmodul untergebracht.

In diesem Tabellenblatt wird es etliche (vielleicht um die 50-100) Checkboxen geben
(Steuerelement Toolbox).

Ich werde diese Boxen alle einzeln einfügen und dafür kleine CheckBox1_Click Subs
erstellen, die dann widerum Unterprozeduren (oder Funktionen?!) aufrufen sollen,
um bei Klick immer die gleichen umfangreicheren Operationen bezogen auf die jeweilige Klick-Zeile
zu vollziehen.

Mein Problem ist jetzt, gerade diese Information, um welche CheckBox-Nr. es sich handelt aus der schlanken Click-
prozedur in die Subs zu überführen und dort vor allem dann die jeweiligen Befehle gültig zusammenzusetzen.

ein Beispiel:

Private Sub CheckBox2_Click()
Dim sBoxNum As String
sBoxNum = "CheckBox2"
Dim Zeichenkette As Boolean
Zeichenkette = CheckBox2.Value
Call CB_haken(Zeichenkette, sBoxNum)

End Sub

Function CB_haken(Zeichenkette As Boolean, sBoxNum As String)

If Not bCheckNoEvent Then GoTo ausfuehren
bCheckNoEvent = False
Exit Function
ausfuehren:
Dim ws As Worksheet, s As Shape
Dim Statusbit As Boolean
Statusbit = False
Set ws = ActiveSheet
    Set s = ws.Shapes(sBoxNum)
If Zeichenkette Then
Call LinkerHakenEin(s.TopLeftCell.Row, Zeichenkette, Statusbit)
End If
If Not Zeichenkette Then
Call LinkerHakenAus(s.TopLeftCell.Row, Zeichenkette, Statusbit)
End If
End Function
Stellvertretend für "eines" meiner Probleme In der ersten Sub "CheckBox2_Click()":

Ich würde gerne, nachdem ich die Stringvariable sBoxNum="CheckBox2" belegt habe,
die Boolesche Variable "Zeichenkette" mit dem Ergebnis aus quasi Checkbox2.Value belegen, eben in der Art
Zeichenkette = sBoxNum.Value
Da versteht VBA aber einen Spaß und erlaubt dies nicht!
Weshalb?
Es geht doch auch in der zweiten Funktion:

Set s = ws.Shapes(sBoxNum)

Die verhält sich genauso, als hätte ich gleich Set s = ws.Shapes("Checkbox1") geschrieben.

Und wenn ich dann schonmal soweit wäre, dass ich die Ausdrücke durch Variablen-Einsatz etwas dynamischer
gestalten könnte, gäbe es auch noch die Möglichkeit, in letzter Konsequenz diesen String aus der Sub-Bezeichnung
zu extrahieren und dann erst für Befehle zu verwenden?

Ganz am Ende, hätte ich auch nichts dagegen, wenn es noch einen zusätzlichen Hinweis gäbe, wie ich mein
Vorhaben einfacher gestalten könnte.

Besten Dank für eine Antwort

Brandon

  

Betrifft: AW: VBA-Code .Value u.A. aus Variablen bilden von: Luschi
Geschrieben am: 14.08.2014 22:45:10

Hallo Brandon,

daß Problem der Auswertung, welche Checkbox gerade vom User gecheckt wurde, ist nur durch ein Klassenmodul vernünftig hinzukriegen. Deshalb hier mal ein Beispiel dazu.

https://www.herber.de/bbs/user/92122.xls

Gruß von Luschi
aus klein-Paris


  

Betrifft: AW: VBA-Code .Value u.A. aus Variablen bilden von: Daniel
Geschrieben am: 15.08.2014 13:12:00

Hi

wenns viele Checkboxen sind, die alle im Prinzip den selben Code benötigten, dann ist es oft günstiger, statt der ActiveX-Checkboxen die Formular-Steuerelemente zu verwenden.
Diesen kannst du ein Makro aus einem allgemeinen Modul zuweisen, welches dann bei Klick auf das Steuerelement ausgeführt wird, dabei kannst du für alle Checkboxen das selbe Makro verwenden.
In diesem Makro kannst du dann über Application.Caller herausfinden, welche Checkbox angeklickt wurde und damit das Makro aufgerufen hat.

eine andere Alternative bei sehr vielen Checkboxen ist, einfach über das BeforeDoubleClick_Event die Zellen direkt als Checkbox zu verwenden.

Gruß Daniel


  

Betrifft: AW: VBA-Code .Value u.A. aus Variablen bilden von: Brandon Quest
Geschrieben am: 15.08.2014 13:31:08

Moin,

damit nicht der Eindruck entsteht, ich stelle mich tot,
ein kurzes Dankeschön für die Hinweise.
Ich werde mir dieses Wochenende beide Hinweise
vornehmen und Rückmeldung geben.

Nebenbei erwähnt:
Es soll nicht nur ein Klickereignis ausgewertet
werden, sondern auch über eine MsgBox in bestimmten
Konstellationen abgefragt werden,
ob der Klick versehentlich gewesen ist, und dann
im Zeifelsfall über VBA wieder Rückgängig gemacht
werden, ohne dabei ein erneutes (negatives oder positives)
Klickereignis zu generieren.

Das läuft auch alles schon.
Muss mal schauen, wie ich das in die neuen Vorschläge
einbaue.

Ach ja, und ganz am Ende würde mich immer noch
interessieren, weshalb für den geschilderten Fall
" Boolian = Stringvariable.Value "
wobei Stringvariable Checkbox1 ist (und das Ergebnis von
Checkbox1.variable demnach wahr oder falsch ist)
Excel meckert?

Gruß
Brandon


  

Betrifft: AW: VBA-Code .Value u.A. aus Variablen bilden von: Daniel
Geschrieben am: 15.08.2014 23:19:10

Ich glaube über

ActiveSheet.OLEObjects("Checkbox1").object.value = True

Gruß Daniel


 

Beiträge aus den Excel-Beispielen zum Thema "VBA-Code .Value u.A. aus Variablen bilden"