
Extraído de la Knowledge Base de Microsoft.
Se muestra cómo avanzar de campo con Enter y cómo retroceder con la flecha arriba.
En el formulario declararemos :
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function SetKeyboardState Lib "user32" (lppbKeyState As Byte) As Long
Private Declare Function GetKeyboardState Lib "user32" (pbKeyState As Byte) As Long
Const WM_KEYDOWN = &H100
Const VK_TAB = &H9
Const VK_SHIFT = &H10
En el evento KeyDown del TextBox pondremos :
Dim bTeclas(0 To 255) As Byte
Select Case KeyCode
Case vbKeyReturn:
' Mandar mensaje de tabulador
PostMessage Text2.hwnd, WM_KEYDOWN, VK_TAB, 0
Case vbKeyUp:
GetKeyboardState bTeclas(0)
' Simulación de la pulsación de la tecla SHIFT
bTeclas(VK_SHIFT) = True
SetKeyboardState bTeclas(0)
' Mandar mensaje de tabulador
PostMessage Text2.hwnd, WM_KEYDOWN, VK_TAB, 0
DoEvents
' Liberación de la tecla SHIFT
bTeclas(VK_SHIFT) = False
SetKeyboardState bTeclas(0)
End Select
KeyCode = 0
Y en el evento KeyPress del TextBox pondremos, para evitar el pitido :
If KeyAscii = vbKeyReturn Then KeyAscii = 0
Para que esto funcione no debe haber ningún botón con la propiedad Default a true.

Basado en el anterior artículo de la KB de Microsoft se adjunta una clase (con un ejemplo de uso) para que un textbox salte al siguiente control con Enter y al anterior con la flecha arriba.
Aunque la clase está echa para TextBox es muy sencillo cambiarla para otro tipo de control.
Su uso es muy sencillo.
Por cada TextBox que queramos que salte con el enter declaramos:
dim variable as New cTextBoxConEnter
Y en el load del formulario :
variable.Init NombreDelTextBox

