Registriert seit: 25.07.2014
Version(en): 2013
Hallo Leute,
habe folgendes Problem. Wenn ich hier z.B. die Taste A in einer Textbox1 drücke wird irgendeine Funktion aufgerufen. Anbei mein Codefragement:
Code:
Public Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case (KeyCode)
Case (65) 'Taste A
Call IrgendeineFunktion
End Select
End Sub
So weit so gut. Ich möchte aber nun eine Funktionserweiterung der gesamten Geschichte haben. Drücke ich die Taste A normal soll weiterhin IrgendeineFunktion ausgeführt werden, drücke ich die Taste A schnell hintereinander (wie beim Doppelklick mit der Maustaste) soll eine völlige andere Funktion aufgerufen werden. Wie bekomme ich es mittels VBA Programmierung hin, dass der Code zwischen einfachem und schnellem Doppelklick unterscheidet? - Sollte die ganze Angelegheit nicht möglich sein, bitte ich einen von unseren üblichen bekannten VBA Großmeistern hier im Forum mir auch das kurz zu posten.
Danke.
Registriert seit: 11.04.2014
Version(en): Office 2007
02.12.2014, 19:28
(Dieser Beitrag wurde zuletzt bearbeitet: 02.12.2014, 19:48 von Steffl.)
Hallo,
das mit dem schnellen Klick dürfte nicht gehen. Als Alternative könntest Du eventuell es mal so versuchen (ist jetzt nur so hingeschrieben und daher auch nicht getestet). Bei jeder zweiten Eingabe eines A wird eine andere Funktion ausgeführt ansonsten die normale.
Code:
Public Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Static bolZweiterKlick as Boolean
Select Case (KeyCode)
Case (65) 'Taste A
If bolZweiterKlick then bolZweiterKlick = True Else bolZweiterKlick = False
If bolZweiterKlick Then
Call IrgendeineFunktion
else
Call IrgendeineandereFunktion
End If
End Select
End Sub
Gruß Stefan
Win 10 / Office 2016
Registriert seit: 25.07.2014
Version(en): 2013
Hallo Stefan,
danke schon mal für deinen Lösungsvorschlag. Werde ihn kurzfristig ausprobieren. Ich mache mir auch so meine Gedanken und kann mir nicht vorstellen, dass es nicht gehen sollte.
Man könnte z.B. irgendwie so einen kleinen Zeitschalter einbauen der dann wartet ob das 2. Ereignis kommt oder nicht. Mal sehen was noch so an Vorschlägen kommt.
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallo Kathrin,
das Thema hatten wir dieser Tage. Siehe meine Antwort hier:
http://www.clever-excel-forum.de/thread-...ml#pid9740Eine Beispielmappe dazu hatte ich später in diesem Thread eingestellt.
. \\\|/// Hoffe, geholfen zu haben.
( ô ô ) Grüße, André aus G in T
ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 25.07.2014
Version(en): 2013
Hallo Experten,
die Unterscheidung ob die Taste A einmal oder doppelklickmäßig zweimal schnelle hintereinander gedrückt wurde, habe ich folgendermassen umgesetzt:
Code:
Dim gx 'globale Variable
Public Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
TextBox1.Value = "" 'Textbox1 wieder leermachen
Dim sTime As Single
isEvent = True
sTime = Timer
Select Case (KeyCode)
Case (65) 'Taste A
gx = gx + 1
Do
DoEvents
If Not isEvent Then Exit Sub
Loop Until Timer > sTime + 0.5 Or Timer < sTime
If gx = 1 Then Er1
If gx = 2 Then Er2
End Select
End Sub
Public Function Er1()
TextBox1.Text = "" 'Textbox1 wieder leermachen
TextBox2.Value = "Einfachklick" 'Anzeige in einer 2. Textbox um welche Art Klick es sich handelt
gx = 0
End Function
Public Function Er2()
TextBox1.Text = "" 'Textbox1 wieder leermachen
TextBox2.Value = "Doppelklick" 'Anzeige in einer 2. Textbox um welche Art Klick es sich handelt
gx = 0
End Function
Sub UserForm_Initialize()
gx = 0 'globale Variable initiieren
End Sub
Die Unterscheidung ob die Taste A einfach oder doppelt geklickt wurde ist nicht das Problem. Das funktioniert hier. Was mich aber in den Wahnsinn treibt,
ist, dass ich die Textbox1 nicht leer bekomme. Drücke ich die die Taste a, zeigt mir die Textbox1 auch immer schön wieder den Buchstaben a an. obwohl ich Codemäßig alles getan
habe um die Textbox1 wieder leer zu bekommen. Wie ist das möglich, dass der Buchstabe a sich in der Textbox1 so festfrisst? Wo liegt mein Fehler? Das "a" klebt einfach!
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo,
setze mal einen Haltepunkt im KeyDown-Ereignis deiner Textbox und schaue, wie Excel die Codes abarbeitet.
Gruß Stefan
Win 10 / Office 2016
Registriert seit: 25.07.2014
Version(en): 2013
Hallo Stefan,
habe alle möglichen Variationen ausprobiert. Krieg das blöde a nicht weg.
Das beste Ergebnis bekomme ich noch, wenn einfach nur TextBox1.Value = "" in die
Do Loop Schleife schreibe. Dann habe ich wenigstens kein Doppel - a mehr in der TextBox stehen.
Würde mich mal wirklich interessieren welcher Teufel diesen Code denn reitet.
Registriert seit: 25.07.2014
Version(en): 2013
Hallo,
verwende ich ein KeyUp statt KeyDown habe ich das Problem nicht. Allerdings funktioniert
dann auch der Code nicht. Das Problem liegt also ganz allgemein zwischen KeyUp und KeyDown.
Doch wie löst man so etwas?
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hallo Kathrin,
KeyCode auf Null setzen und das eingegebene Zeichen ist weg.
Code:
Select Case KeyCode
Case (65) 'Taste A
gx = gx + 1
KeyCode = 0
Gruß Uwe
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo Kathrin,
ich habe mal ein wenig gekürzt aufgebaut:
Code:
Option Explicit
Dim gx 'globale Variable
Private Sub TextBox1_Keydown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case (KeyCode)
Case (65) 'Taste A
If CDbl(TextBox1.Tag) < Timer - 0.5 Then
gx = 1
Else
gx = 2
End If
End Select
If gx = 1 Then Er1
If gx = 2 Then Er2
TextBox1.Tag = Timer
KeyCode = 0
End Sub
Public Function Er1()
'TextBox1.Text = "" 'Textbox1 wieder leermachen
TextBox2.Value = "Einfachklick" 'Anzeige in einer 2. Textbox um welche Art Klick es sich handelt
'gx = 0
End Function
Public Function Er2()
'TextBox1.Text = "" 'Textbox1 wieder leermachen
TextBox2.Value = "Doppelklick" 'Anzeige in einer 2. Textbox um welche Art Klick es sich handelt
End Function
Private Sub UserForm_Initialize()
TextBox1.Tag = 0
End Sub
Falls bei Einfach Klick der Wert drin bleiben soll, dann müsste das KeyUp Ereignis genaommen werden.
Vielleicht ist es sowieso das geeignetere Ereignis in diesem Fall.
Schau mal:
Code:
Option Explicit
Dim gx 'globale Variable
Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case (KeyCode)
Case (65) 'Taste A
If CDbl(TextBox1.Tag) < Timer - 0.5 Then
gx = 1
Else
gx = 2
End If
End Select
If gx = 1 Then Er1
If gx = 2 Then Er2
TextBox1.Tag = Timer
End Sub
Public Function Er1()
'TextBox1.Text = "" 'Textbox1 wieder leermachen
TextBox2.Value = "Einfachklick" 'Anzeige in einer 2. Textbox um welche Art Klick es sich handelt
End Function
Public Function Er2()
TextBox1.Text = "" 'Textbox1 wieder leermachen
TextBox2.Value = "Doppelklick" 'Anzeige in einer 2. Textbox um welche Art Klick es sich handelt
End Function
Private Sub UserForm_Initialize()
TextBox1.Tag = 0
End Sub
Gruß Atilla