Esto lo pones arriba del todo en las declaraciones de tu Form
Private Declare Function Getasynckeystate Lib "user32" Alias "GetAsyncKeyState" (ByVal VKEY As Long) As Integer
Luego crea un timer con un Intervalo de 1 y el código del timer te quedaría así:
Private Sub Timer1_Timer()
On Error Resume Next
Dim keystate As Long
keystate = Getasynckeystate(vbKey1)
If (keystate And &H1) = &H1 Then
MsgBox "lo que quieras mostrar"
End If
End Sub
Lo que tú tienes que hacer es cambiar en la variable la parte de
vbKey1 por la tecla que quieras. La tecla dos sería vbKey2, la 3 vbKey3 y así sucesivamente... sino encuentras alguna tecla puedes usar su valor ascii que lo puedes encontrar fácilmente en google.
Tú para hacer lo mismo que ese código que has puesto deberías de poner un keystate para cada tecla...
Private Sub Timer1_Timer()
On Error Resume Next
Dim keystate As Long
keystate = Getasynckeystate(vbKey1)
If (keystate And &H1) = &H1 Then
num(1)=num(1)+1
End If
keystate = Getasynckeystate(vbKey2)
If (keystate And &H1) = &H1 Then
num(2)=num(2)+1
End If
keystate = Getasynckeystate(vbKey3)
If (keystate And &H1) = &H1 Then
num(3)=num(3)+1
End If
.
.
.
'Y así con todas las teclas que quieras y luego puedes hacer un if más para ejecutar 'el mensaje.
If num(x) = 4 Then
msgbox "el numero " & x & " se pulso 4 veces ya"
End If
End Sub
Sólo tienes que adaptarlo a lo que tú quieras hacer, es fácil, espero que te haya aclarado las dudas.
Saludos