Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Commandbutton überlagert Userform Events
#1
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?
Antworten Top
#2
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
Antworten Top
#3
Hallöchen,

sollte funktionieren - ein Commandbutton hat auch ein Keydown - musst es nur nutzen Smile
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#4
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-Problem

Das 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?
Antworten Top
#5
Hallöchen,

schauen wir mal was der TE braucht Smile

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:
  • Algor
Antworten Top
#6
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 Sub
Gruß Uwe
	
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • Algor
Antworten Top
#7
Danke für den Code und die großartige Hilfe! Das hilft mir um einiges weiter.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste