2016-09-27 36 views
0

我想用VBA來測量用戶按下某個鍵的時間量,例如Space。 當用戶停止按下時,時間被存儲並添加到再次按下該按鍵的時間。VBA獲取按鍵的時間量

我是VBA的新成員,並且在語法上有一些問題。所以我找到了keyUP和keyDown函數here,但它似乎使用它錯誤的方式。

我迄今爲止代碼:如果控制具有焦點

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

對不起,問,但你想用這個作爲形式的事件,對吧? – Pav

+0

如果用戶按下excel文檔某處的空格鍵,就會發生這種情況。 –

+0

對,你發佈的代碼有點誤導,然後form_KeyDown是一個事件在表單中觸發的事件,而不是在工作表中。因此Thomas Inzina提出的解決方案(一個很好的解決方案!)將不起作用。 – Pav

回答

1

用戶窗體的關鍵事件將不會觸發。您需要使用全局變量或靜態方法來跟蹤按鍵。

這裏我使用一個子程序中的靜態數組變量來追蹤所有的標準按鍵。

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似乎是尋找電子表格中的按鍵而不是表單。 – Pav