2016-09-27 1 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

정의 폼의 키 이벤트가 발생하지 않습니다. 키 누르기를 추적하려면 전역 변수 또는 정적 메서드를 사용해야합니다.

여기에서는 모든 표준 키를 추적하는 서브 루틴 내에서 정적 배열 변수를 사용합니다.

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

관련 문제