Forum: PC Hard- und Software VBA Sub prüft wer sie aufgerufen hat


von Reinhard #. (gruebler)


Lesenswert?

Hallo zusammen

Ich habe in einer Excel Tabelle vier Tasten,
(Formular-Steuerelemente) die eine Sub
mit einer umfangreichen Analyse starten.
Je nach Taste ändert sich nur ein Parameter.

Ich fände es jetzt elegant, wenn alle Tasten
die gleiche Sub aufrufen. Diese prüft von
welcher Taste das "Startsignal" gekommen ist
und wählt den passenden Startparameter.

Es müsste also irgend eine Form der
Übergabe von der Taste zur Sub erfolgen.
Etwa in der Form:
1
Sub anayse(Get_Taste As Integer) 'oder so
Mit welchem Befehl kann ich ermitteln,
welche Taste der Nutzer gedrückt hat?

von tg (Gast)


Lesenswert?

Hallo Reinhard,

nicht ganz so elegant, wie du's gern hättest: jede Taste ruft ihre Sub 
auf, und die wiederum die Auswertungs-Sub und übergibt dabei die 
Tastennummer als zusätzlichen Parameter.

von Reinhard #. (gruebler)


Lesenswert?

tg schrieb:
> jede Taste ruft ihre Sub

Ja klar, das ist die zweitbeste Lösung.
Aber ich möchte die Beste ;-)

von Jan H. (j_hansen)


Lesenswert?

Reinhard #. schrieb:
> Ja klar, das ist die zweitbeste Lösung.
> Aber ich möchte die Beste ;-)

Besser ist die nicht. Mir gefällt es besser, wenn die Buttons möglichst 
dumm sind und jede ihre eigene Funktion aufrufen. Ansonsten wandert ja 
schon etwas Logik in die Buttons, bzw. musst du dann ja in der "großen" 
Funktion erst wieder prüfen welcher Button gedrückt wurde. Damit macht 
die Funktion schon wieder mehr als sie sollte.
Also wenn es nicht aus Prinzip so sein muss, dann empfehle ich die 
Lösung von tg, welche er zwar "nicht ganz so elegant" nennt, ich aber 
viel eleganter finde.

von Georg (Gast)


Lesenswert?

Reinhard #. schrieb:
> Ja klar, das ist die zweitbeste Lösung.

Ist es nicht. Du kannst natürlich in einer Einheitsfunktion irgendwie 
die zuletzt gedrückte Taste bestimmen und danach verzweigen, aber es ist 
wesentlich einfacher und OO-gerechter, jeder Taste ihre Routine 
zuzuordnen, die weiss ja schon die Taste, und so kannst du sie an eine 
gemeinsame Auswertung übergeben, sofern das überhaupt sinnvoll ist, z.B. 
bei Zifferntasten - gibt es nichts gemeinsames, muss man das auch nicht 
in eine einzige Routine zwingen.

Einzusehen ist eine gemeinsame Behandlung bei 10 Zifferntasten oder 26 
Buchstaben, bei 4 Tasten ist das eher lachhaft.

Georg

von Thomas (Gast)


Angehängte Dateien:

Lesenswert?

Georg schrieb:
> Du kannst natürlich

Ja, aber wie?

Kannst das Makro im angehängtem Excel Dokument bitte entsprechend 
anpassen?

Gruß,
Thomas

von Georg (Gast)


Lesenswert?

Thomas schrieb:
> Ja, aber wie?

Du kannst den KeyPressed Event benutzen und den ASCII-Code in eine 
Variable schreiben, die du dann abfragst.

Prinzipiell ist der Umgang mit der Tastatur in VBA eventgesteuert. Was 
auch geht: in der Behandlungsroutine für den Button (für jeden eine 
eigene) schreibst du in eine Variable, welcher Button gedrückt wurde, 
und damit rufst du den gemeinsamen Code für alle Keys auf.

Georg

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.