2016-09-27 5 views
0

Je veux faire un Makro avec VBA qui mesure la quantité de temps que l'utilisateur appuie sur une touche, par exemple l'espace. Et lorsque l'utilisateur cesse d'appuyer dessus, l'heure est enregistrée et ajoutée à l'heure à laquelle vous appuyez de nouveau sur la touche. Je suis nouveau à VBA et j'ai quelques problèmes avec la syntaxe. J'ai donc trouvé les fonctions keyUP et keyDown here, mais il semble que je ne l'utilise pas dans le bon sens.VBA obtenir la quantité de temps une touche est pressée

Mon code à ce jour:

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

Désolé pour demander, mais vous essayez de l'utiliser comme un événement de la forme, non? – Pav

+0

Cela devrait arriver si l'utilisateur appuie sur la touche espace quelque part dans le document Excel. –

+0

À droite, le code que vous avez publié était un peu trompeur alors que form_KeyDown est un événement déclenché dans les formulaires, pas dans les feuilles de calcul. D'où la solution présentée par Thomas Inzina (une belle!) Ne fonctionnera pas. – Pav

Répondre

1

des événements clés de l'formUtilisateur ne se déclenchent pas si un contrôle a le focus. Vous devez utiliser une variable globale ou une méthode statique pour suivre la pression sur la touche.

Ici, j'utilise une variable tableau statique à l'intérieur d'une sous-routine, le suivi de toutes les touches standard.

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 semble être à la recherche d'une touche appuie dans des feuilles de calcul et non des formes. – Pav