Podrías usar la función GetAsyncKeyState de la API de Win32 para obtener el estado de las teclas virtuales. Por ejemplo:
Sub IniciarTeclas()
Dim i%
'Inicializa el estado de las teclas virtuales.
For i = 0 To 255
Call GetAsyncKeyState(i)
Next
End Sub
Function TeclaApretada() As Boolean
Dim i%
For i = 0 To 255
If GetAsyncKeyState(i) Then
'Si se apretó una tecla.
TeclaApretada = True
Exit For
End If
Next
End Function
Sub EsperarTecla()
'Inicializa el estado de las teclas virtuales.
'
Call IniciarTeclas()
Do
'Espera que se presione una tecla.
If TeclaApretada Then
'Hace las tareas necesarias cuando se apreta una tecla.
End If
DoEvents
Loop
End Sub
El prototipo de la función GetAsyncKeyState es el siguiente:
Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Si de lo que hablás es de esperar que un usuario presione una tecla en un formulario, usa el evento KeyDown del formulario y establecé la propiedad KeyPreview a True para que todas las pulsaciones primero se manden al formulario antes de que a cualquier control.