2016-09-27 4 views
0

私は、ユーザーがキーを押した時間(例えばSpace)を測定するVBAを使用してMakroを実行します。 ユーザーがキーを押すのを止めると、時間が保存され、キーが再び押された時刻に追加されます。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

ユーザーフォームのキーイベントは発生しません。キーの押下を追跡するには、グローバル変数またはStaticメソッドを使用する必要があります。

ここでは、すべての標準的なキーを押すサブルーチン内で静的配列変数を使用します。

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

ベニーはそうですフォームではなくスプレッドシートのキープレスを探しています。 – Pav

関連する問題