2016-09-27 5 views
0

Я хочу сделать Makro с VBA, который измеряет время, которое пользователь нажимает на клавишу, например Space. И когда пользователь перестает нажимать на него, время сохраняется и добавляется к времени, когда клавиша снова нажата.VBA получить количество времени, когда нажата клавиша

Im новое для 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 - это событие, инициированное в формах, а не в листах. Следовательно, решение, представленное Томасом Инзиной (хороший!), Не будет работать. – Pav

ответ

1

Ключевые события пользовательской формы не срабатывает, если элемент управления имеет фокус. Для отслеживания нажатия клавиши вам потребуется либо глобальная переменная, либо метод Static.

Здесь я использую переменную Static array внутри подпрограммы трека, все стандартные нажатия клавиш.

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