2016-09-27 1 views
0

Ich möchte ein Makro mit VBA machen, die die Zeit misst, die der Benutzer eine Taste drückt, zum Beispiel Space. Und wenn der Benutzer es nicht mehr drückt, wird die Zeit gespeichert und zu der Zeit hinzugefügt, wenn die Taste erneut gedrückt wird.VBA Zeit erhalten eine Taste gedrückt

Ich bin neu in VBA und habe einige Probleme mit der Syntax. So fand ich die keyUP- und keyDown-Funktionen here, aber es scheint, dass ich es falsch benutze.

Mein Code so weit:

Sub KeyTime() 
Time_old = 0 
Range("A1").Value = Time_old 
If Form_KeyDown(vbKeySpace, 0) Then 
    Start_time = Timer 
    If Form_KeyUp(vbKeySpace, 0) Then 
     End_time = Timer 
     Time = End_time - Start_time + Time_old 
     Time_old = Time 
     Range("A1").Value = Time_old 
    End If 
End If 
End Sub 
+0

Es tut uns fragen, aber Sie versuchen, dies als ein Ereignis der Form zu verwenden, nicht wahr? – Pav

+0

Es sollte passieren, wenn der Benutzer irgendwo im Excel-Dokument die Leertaste drückt. –

+0

Richtig, der von Ihnen gepostete Code war etwas irreführend, da form_KeyDown ein Ereignis ist, das in Formularen ausgelöst wird, nicht in Arbeitsblättern. Daher wird die von Thomas Inzina vorgestellte Lösung (eine schöne!) Nicht funktionieren. – Pav

Antwort

1

die wichtigsten Ereignisse der Userform wird nicht ausgelöst, wenn ein Steuerelement den Fokus hat. Sie müssen entweder eine globale Variable oder eine statische Methode verwenden, um den Tastendruck zu verfolgen.

Hier verwende ich eine statische Array-Variable innerhalb einer Unterroutine die Spur alle Standard-Tasten drücken.

enter image description here

Sub CountKeyPresses(KeyAscii As MSForms.ReturnInteger) 
    Static KeyCounts(255) As Long 
    If KeyAscii <= 255 Then 
     KeyCounts(KeyAscii) = KeyCounts(KeyAscii) + 1 
     Me.Caption = "Key(" & Chr(KeyAscii) & ") was pressed " & KeyCounts(KeyAscii) & " times" 
    End If 
End Sub 

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 
    CountKeyPresses KeyAscii 
End Sub 

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 
    CountKeyPresses KeyAscii 
End Sub 
+0

Benny scheint zu sein Suche nach einem Schlüssel drückt in Tabellen und nicht in Formulare. – Pav

Verwandte Themen