Excel VBA - UserForm Commandbutton über Shortcut starten

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Wenn es wirklich ein Button im UserForm ist, geht es sehr viel einfacher. Schreibe in die UserForm folgenden Code:

Private Sub UserForm_Initialize()
    CommandButton1.Accelerator = "a"
    'Zugriff über Alt + a
End Sub

Kleiner Nachteil: Du kannst nur Kleinbuchstaben verwenden und es funzt nur mit Alt + Buchstabe (statt Strg + Buchstabe). Großer Vorteil: Du musst den Zahlenwert des "KeyAscii" nicht umständlich ermitteln.

Der Accelerator funzt für alle Zeichen der Tastatur, solange sie nicht mit Zusatztaste (Shift, Alt, AltGr) aufgerufen werden.

Das mit dem "KeyAscii" dagegen geht ausschließlich mit den Buchstaben a bis x, y und z werden ausgeblendet, weil sie auf der englischen Tastatur anders liegen (wie auch die Sonderzeichen. Warum die Zahlen nicht funzen erschließt sich mir nicht)

0

Supi, klappt :-) ... nur schade das STRG nicht geht...

Danke

0

Schreibe ein Makro in ein Modul (im Tabellenblatt geht es nicht), das wie folgt aussieht:

Sub CB_1Tab1()
'
' Tastenkombination: Strg+a
' Ist das Makro des Commanbutton 1 in Tabelle 1

MsgBox "Hallo Welt" 'als Beispiel
'Es folgt dein Code
End Sub

Anschließend geht du in das Tabellenblatt, mit Alt F8 öffnest du den Makros-Dialog, dort markierst du dein Makro (blau!) und gehst auf Optionen, hier stellst du dann deine Tastenkombination ein.

Zum Schluss hinterlegst du für den Commandbutton1 den Code:

Private Sub CommandButton1_Click()
Call CB_1Tab1
End Sub
Makros-Dialog - (Microsoft Excel, Office, VBA)

Wie in meinem Kommentar schon gesagt, funktioniert' dein Vorschlag auch nur, wenn der TE im Blatt bearbeitet, was er aber scheint's nicht vorhat. Es geht im aber um einen Button in seiner Form und nicht auf dem Blatt.

0

Schreibe für jedes Control im KeyPress-Event ein Verweis auf die "KeyPressed"-Methode, die dann die Codes auswertet und dann auf das Click-Event des Commandbuttons verweist.

Code (getestet):

Private Sub CommandButton1_Click()
    'Code
End Sub

Private Sub CommandButton1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    KeyPressed (KeyAscii)
End Sub

Private Sub UserForm_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    KeyPressed (KeyAscii)
End Sub

Private Sub KeyPressed(ByVal KeyAscii As Integer)
    If KeyAscii = 1 Then CommandButton1_Click
End Sub

Toller Ratschlag:

funzt nur ein Mal, nämlich, wenn ich noch keine Zelle angesprungen habe. Habe ich einen Eintrag gemacht und drücke erneut die "1" wird diese in die Zelle eingetragen.

Außerdem: wie wäre der Code für Strg + a? Das war zumindest die Frage.

Nach meiner Kenntnis gibt es keine verlässliche Methode einen Commandbutton im Blatt anzuspringen.

0
@PauleVBA

Hallo PauleVBA,

Der TE sprach von einer Userform, in der er die Tastenkombi einstellen kann. oweit er die Form nicht modal geschalten hat, bedarf es keines Makros, wie du es beschrieben hast.

Wie kommst du auf die "1"? man sieht doch, dass der "KeyAscii" vom Typ "MSFroms.ReturnInteger" ist. Somit bekämen wir für Tasten, die keine Zahlen darstellen ein Problem. Aber da der "KeyAscii" einen Integer von (offensichtlich) einer Enumeration zurückgibt, muss lediglich ausprobiert werden, welchen Code wir beim drücken der Tasten zurückbekommen.

Es hat mich überrascht: Der Code für die Tastenkombi [CTRL] + [A] ist = 1, Der für [CTRL] + [B] ist = 2 und so weiter...

Wenn du meinen Vorschlag ausprobiert hättest, hättest du das ohne Weiteres bemerkt.

Und zum letzten Teil: wie schon gesagt, fragte der TE nach einer Lösung in einer Userform. Wenn er den Dialog aber modal geschalten hat und in der Tabelle herumspielt funktioniert dein Vorschlag. Aber auch nur, wenn er nicht gerade eine Zelle bearbeitet.

0
@Higlav

als Aussenstehender profitire ich ja von solchen Auseinandersetzungen, aber ich habe den Eindruck, dass sich da eine Menge Emotionen angesammelt haben, die sich zwischen den Zeilen Bahn brechen. Take it easy!

1