Registriert seit: 01.02.2016
Version(en): 2010
Hallo Leute,
ein kleines Experiment auf der Userform:
Gegeben, absolut leere Userform einzigste Prozedur:
Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
MsgBox Chr(KeyCode)
End Sub
Ihr clickt auf die Form und bekommt das entsprechende Zeichen angezeigt. So weit so gut.
Jetzt das Problem:
Ihr installiert noch einen CommandButton darauf:
Private Sub CommandButton1_Click()
CommandButton1.TakeFocusOnClick = False
End Sub
(Den Fokus habe ich schon mal versucht vom Commandbutton wegzunehmen, hat aber sonst nicht viel zu bedeuten!)
Und jetzt mein Problem: Ich möchte weiterhin das entsprechende KeyCode - Zeichen angezeigt bekommen, wenn ich irgendeine Taste drücke.
Der "CommandButton" überlagert aber die Userform Events.
Wie kriege ich so etwas hin?
Registriert seit: 25.04.2016
Version(en): 2013
17.03.2018, 16:12
(Dieser Beitrag wurde zuletzt bearbeitet: 17.03.2018, 16:13 von Storax.)
Frage ist natürlich, wofür das gut sein soll, denn ich vermute hier ein XY Problem.
Ansonsten geht das IMO nicht, außer Du klinkst Dich ins Keyboard ein, Ansatz
hier
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen,
sollte funktionieren - ein Commandbutton hat auch ein Keydown - musst es nur nutzen
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 25.04.2016
Version(en): 2013
18.03.2018, 10:27
(Dieser Beitrag wurde zuletzt bearbeitet: 18.03.2018, 10:27 von Storax.)
Das würde ich nicht so sehen, denn dann muss er bei jedem Control das KeyDown nutzen.
Die Frage ist, was der TO wirklich will, dasher mein Hinweis:
XY-ProblemDas KeyDown der Userform wird nicht mehr getriggert, sobald ein Control auf der Form ist.
Andererseits möchte der TO, so habe ich es verstanden (also das Y-Problem), zunächst jeden Tastendruck abfangen und z.B. einen Hinweis ausgeben.
Ein anderer Ansatz wäre evtl. alle Controls zu sammeln und das Keydown Event in einer Klasse abzufangen. Aber ob das so ohne weiteres geht ...
Aber nochmal: Wozu soll das gut sein? Was ist das X-Problem?
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen,
schauen wir mal was der TE braucht

Zum Punkt Klassenmodule:
Mit den Klassen könnte funktionieren. Ich habe mal fix Peter Haserodt's Beispiel genommen
www.online-excel.de/excel/singsel_vba.php?f=57
--> erzeugt dynamisch die CommandButtons
und in das Klassenmodul noch ein KeyDown gepackt:
Private Sub DerCmd_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
MsgBox "Down"
End Sub
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28
• Algor
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo Algor,
wie André in #3 schrieb, müsstest Du für jedes Control das jeweilige KeyDown-Ereignis auswerten.
Willst Du immer auf das UserForm_KeyDown-Ereignis zugreifen, reicht eine "Weiterleitung" auf dieses.
Hier ein Beispiel:
Private Sub CommandButton1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
UserForm_KeyDown KeyCode, Shift
End Sub
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
UserForm_KeyDown KeyCode, Shift
End Sub
Private Sub UserForm_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim strControl As String
If Not ActiveControl Is Nothing Then
strControl = ActiveControl.Name
Else
strControl = Me.Name
End If
MsgBox "Das Tasterunterdrückereignis wurde durch die Taste """ & Chr(KeyCode) & """" & vbNewLine _
& "im Element """ & strControl & """ ausgelöst."
End SubGruß Uwe
Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:1 Nutzer sagt Danke an Kuwer für diesen Beitrag 28
• Algor
Registriert seit: 01.02.2016
Version(en): 2010
Danke für den Code und die großartige Hilfe! Das hilft mir um einiges weiter.