El problema es que VB usa la serie de caracteres Unicode, y lo que devuelve lo hace en Unicode. Para solucionar esto existe una función que se llama
MultiByteToWideChar, que convierte el caracter desde la página de códigos del teclado a su equivalente ANSI.
La siguiente función devuelve el caracter ANSI del código de tecla especificado.
Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As String, ByVal cchMultiByte As Long, ByVal lpWideCharStr As String, ByVal cchWideChar As Long) As Integer
Const CP_OEMCP = 1
Function TranslateChar(KeyCode As Integer) As String
Dim r&, sMultiByte$, sWideChar$
sWideChar = String$(1, 0)
sMultiByte = Chr$(KeyCode)
r = MultiByteToWideChar(CP_OEMCP, 0&, sMultiByte, Len(sMultiByte), ByVal sWideChar, LenB(sWideChar))
TranslateChar = sWideChar
End Function
Saludos.