Hola
Si pruebas a pulsar la tecla 'a' en un textbox verás que en el evento keydown se guarda en la variable keycode el valor 67 que se corresponde con A, en cambio en el evento keypress se guarda en la variable keyascii el valor 'a' que es el que pulsaste.
Esto es porque keydown y keyup miran que tecla física se ha pulsado mientras que keypress miran que caracter has pulsado y no es lo mismo. Por eso en keypress no puedes controlar las teclas F!...F12, los control, los shift, los alt, ... porque no tienen correspondencia con ningún caracter.
Pongamos por caso que yo quiero en Visual Lisp decir que si una tecla es pulsada en minuscula, me de el resultado en mayuscula. Yo lo haria asi:
(setq letra (strcase (chr 97)))
pues aquí haces
sub keypress(keyascii as integer)
keyascii=asc(ucase(chr(keyascii)))
end sub
Esto hace lo siguiente
en keyascii hay un código ascii.
Con chr(keyascii) obtengo el caractar correspondiente ('a')
con ucase('a') obtengo ese caracter en mayúsculas ('A')
con asc('A') obtengo el código ascii de lo obtenido (65)
así que cuando entré keyascii era 97 ('a') y al salir es 65 ('A')
Un saludo