программа уже есть и работает, в ней сотни обращений к text-боксам, поэтому делать массив и переименовывать в тексте все text не имеет никакого смысла. если писать программу заново, тогда согласен по поводу массива.
чтобы не быть голословным приведе пример кода, может я что-то упустил. на форме для примера разместил 10 text-боксов (без массива) и две обычные кнопки (если заработат, стрелки поставить не проблема):
Private Declare Sub keybd_event Lib "user32" _
(ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Const KEYEVENTF_KEYUP = &H2 ‘отпустить кнопку
Const VK_TAB = &H9
Const VK_SHIFT = &H10
'нажимаем кнопку TAB
Private Sub ShowStartMenu1()
Call keybd_event(VK_TAB, 0, 0, 0) 'нажимаем TAB
Call keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0) 'отпускаем TAB
End Sub
'нажимаем кнопки TAB+SHIFT
Private Sub ShowStartMenu2()
Call keybd_event(VK_SHIFT, 0, 0, 0) 'нажимаем SHIFT
Call keybd_event(VK_TAB, 0, 0, 0) 'нажимаем TAB
Call keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0) 'отпускаем TAB
Call keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0) 'отпускаем SHIFT
End Sub
Private Sub Command1_Click() 'вниз
ShowStartMenu1
End Sub
Private Sub Command2_Click() 'вверх
ShowStartMenu2
End Sub
ну скорее всего надо так (хотя с АПИ не дружу)
Private Declare Sub MapVirtualKey Lib "user32" (ByVal uCode As Byte, ByVal uMapType As Byte)
...
'нажимаем кнопки TAB+SHIFT
Private Sub ShowStartMenu2()
Call keybd_event(VK_SHIFT, MapVirtualKey(VK_SHIFT, 0), 0, 0) 'нажимаем SHIFT
Call keybd_event(VK_TAB, 0, 0, 0) 'нажимаем TAB
Call keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP, 0) 'отпускаем TAB
Call keybd_event(VK_SHIFT, MapVirtualKey(VK_SHIFT, 0), KEYEVENTF_KEYUP, 0) 'отпускаем SHIFT
End Sub
только этот код работать не будет, точнее будет, но не как Вы ожидаете
перемещение будет между всеми элементами, а не только текстбоксами, в соответствии с их TabOrder