Wie zähle ich bei VBA (Excel) die Klicks auf einen button und füg ihn dann im Quellcode ein?
Bitte um eine ausführliche Erklärung, weil ich mich noch nicht sehr gut auskenne. Danke für Antworten im voraus.
4 Antworten
Über eine sog. globale Variable oder indem du den Wert in einer Zelle ablegst. Dann kannst du beim erneuten Durchlaufen des Makro zunächst den alten Wert auslesen, verändern und wieder ablegen.
dann arbeite mit zellen. per programm (makro) kannst du - wie gesagt - nichts in den code einfügen.
Ich nehme an, dass Du durch Buttons oder ähnliches einzelne Makros durchläufst und diese Variable ihren Wert behalten soll, also bspw. gezählt werden soll wie oft der Button schon gedrückt wurde.
Du kannst ein Textfeld nutzen, das kann man auch hidden=true setzen, damit es nicht sichtbar ist.
Alten Wert auslesen zu Beginn (wenn die Variable meinetwegen A heisst): A = userform1.textbox1.value
Dann A=A+1 um das erneute Durchlaufen festzuhalten und schließlich ablegen: userform1.textbox1.value=a
Wenn es tatsächlich nur diese eine Operation sein sollte geht es auch kürzer:
userform1.textbox1.value=userform1.textbox1.value+1
Auf die Variable kannst Du im Makro natürlich reagieren.
Sauberer wäre es als globale Variable:
Außerhalb des Makros
public a as integer (oder was es genau sein soll)
Damit bleibt der Wert erhalten, auch wenn die Sub beendet wird.
Danke schon mal, aber irgendwo müsste doch dann noch der gedrückte button rein.
Im Moment bin ich so weit:
Private Sub btnUntenRechts_Click()
LabelUntenMove.Left = LabelUntenMove.Left + 15
End Sub
Private Sub 'was muss hier angegeben werden?
a = Label5.Value
a = a + 1 ',wenn btnUntenRechts gedrückt wurde
Label5.Value = a
End Sub
Kein neues sub sondern direkt nach dem labeluntenmove noch hinzufügen.
"Caption". (Oder, falls es inzwischen auch VBA.NET gibt, "Text".)
Im einfachsten Fall einfach die Klickanzahl in einer globalen Variable hochzählen:
Public counter As Long
Private Sub btnUntenRechts_Click()
counter = counter + 1
MsgBox counter & " mal geklickt"
End Sub
Danke, aber sobald man die msgbox schließt und nochmal auf den button drückt, dann erscheint "1 mal geklickt" wieder. Besser wäre es, wenn da "2 mal geklickt" stehen würde. Außerdem will ich nicht, dass jedes mal die msgbox das Programm abbricht. Kennst du eine Möglichkeit den Text in ein Textfeld einblenden zu lassen? Ich hoffe du kannst mir weiterhelfen.
Letzlich war Deine Anforderung nur, den Wert in einer Variable zu speichern - und das geschieht hier. Es hält Dich ja keiner davon ab, den Wert ganz anders auszugeben, oder in eine Datei oder eine Datenbank zu schreiben - nur zu!
Wenn Dir die globale Variable nicht global genug ist, und Du sie über die Laufzeit des Programms hinweg abspeichern willst, wird Dir auch nichts anderes übrig bleiben, als genau dies zu tun.
Eine "Dialogausgabe" (wie hier MsgBox) verwendet man in Codebeispielen, um auf einfache Weise zu zeigen, dass der Codeabschnitt das gewünschte leistet.
Die Leute, die Codebeispiele (z. B. für Lehrbücher oder auch hier) schreiben, gehen davon aus, dass der Leser weiß, wie er den Beispielcode für seine eigenen Zwecke anpassen kann.
Eine Möglichkeit wäre, die Tag-Eigenschaft des Buttons zu nutzen in der Click-Routine
Button1.Tag = Button1.Tag + 1
Wichtig ist, dass die Tag-Eigenschaft zb auf "0" steht.
Und das kannst du ja jederzeit auslesen
If Button1.Tag > 5 Then
Wichtig zu erwähnen ist, dass die UserForm auch die ganze Zeit offen sein muss. Wird sie geschlossen ist der Tag-Wert ja auch weg. Dann kann man nur "außerhalb" speichern (Registriy, ini-Datei, Zelle)
tut mir leid, deine frage macht überhaupt keinen sinn.
erzähl genauer, was du vorhast.
jedenfalls kannst du nicht mittels eines makros den eignenen quellcode verändern.
Ich will, dass ich z.B. 5x mal auf einen button klicke und das ich dann die Zahl 5 als Variable im Quellcode anzeigen lassen kann. Also a = (z.B.) 5. Wäre gut, wen du wüsstest wie das geht und es erklären würdest.
Vermutlich verwenden wir hier den Begriff "im (Quellcode)" unterschiedlich.
Es sieht so aus, als wenn du fragst, wie der Quellcode aussehen muss, um diese Anzahl irgendwo anzuzeigen.
Üblicherweise versteht man unter "Im Quellcode", dass man die Änderungen sieht, wenn man z. B. eine Entwicklungsumgebung öffnet und sich den Quellcode anzeigen lässt. Es gibt ein paar Skriptsprachen, die ihren eigenen Quellcode modifizieren können, aber VB(A) gehört definitiv nicht dazu.
Ich arbeite leider ohne Zellen, aber geht es, dass man die Zahl auf der UserForm in einem Textfeld anzeigen kann und dann im Code abrufen kann? Bitte erklären, wenn du weißt wie es funktioniert.