Option Explicit
#If VBA7 Then
Private Declare PtrSafe Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As LongPtr)
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As LongPtr, ByVal wMsg As Long, ByVal wParam As LongPtr, ByVal lParam As LongPtr) As Long
Private Declare PtrSafe Function SetTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr, ByVal uElapse As Long, ByVal lpTimerFunc As LongPtr) As LongPtr
Private Declare PtrSafe Function KillTimer Lib "user32" (ByVal hwnd As LongPtr, ByVal nIDEvent As LongPtr) As Long
#Else
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
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 SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
#End If
Private Const KEYEVENTF_KEYUP = &H2
Private Const WM_KEYDOWN = &H100
Private Const VK_DOWN As Long = &H28
Private Const VK_MENU = &H12
Private Const VK_RETURN = &HD
Private Const VK_HOME = &H24
#If Win64 Then
Private hwnd As LongLong
#Else
Private hwnd As Long
#End If
Sub Test()
[a1].Select
Call Sleep(1000)
Call keybd_event(VK_MENU, 0, 0, 0)
Call keybd_event(VK_DOWN, 0, 0, 0)
Call keybd_event(VK_DOWN, 0, KEYEVENTF_KEYUP, 0)
Call keybd_event(VK_MENU, 0, 0 Or KEYEVENTF_KEYUP, 0)
Call SetTimer(Application.hwnd, 0, 0, AddressOf TimerProc1)
End Sub
Sub TimerProc1()
Call KillTimer(Application.hwnd, 0)
hwnd = FindWindow("EXCEL:", vbNullString)
If hwnd Then
Call PostMessage(hwnd, WM_KEYDOWN, VK_HOME, 0)
Call SetTimer(Application.hwnd, 0, 0, AddressOf TimerProc2)
End If
End Sub
Sub TimerProc2()
Call KillTimer(Application.hwnd, 0)
Call Sleep(1000)
Call PostMessage(hwnd, WM_KEYDOWN, VK_DOWN, 0)
Call SetTimer(Application.hwnd, 0, 0, AddressOf TimerProc3)
End Sub
Sub TimerProc3()
Call KillTimer(Application.hwnd, 0)
Call Sleep(1000)
Call PostMessage(hwnd, WM_KEYDOWN, VK_RETURN, 0)
Call SetTimer(Application.hwnd, 0, 0, AddressOf TimerProc4)
End Sub
Sub TimerProc4()
Call KillTimer(Application.hwnd, 0)
Call Sleep(1000)
[a2].Select
End Sub