GetAsyncKeyState возвращает байт, а не логическое значение.Вам нужно «И» это с битом, который вы ищете, чтобы получить значимый результат.
В вашем случае вам нужен бит & H8000.Из документов Microsoft для GetAsyncKeyState:
Если установлен бит & H8000 возвращаемого значения, клавиша была нажата как минимум один раз, так как последний раз поток вызывал GetAsyncKeyState
Sub WaitUntilF9Key()
Do Until GetAsyncKeyState(VK_F9) And &H8000
DoEvents
Loop
MsgBox ("Ta Da")
End Sub
Sub WaitUntilLButton()
Do Until GetAsyncKeyState(VK_LBUTTON) And &H8000
DoEvents
Loop
MsgBox ("Ta Da")
End Sub
Тем не менее, как и другие упоминали, подобных циклов занятости обычно следует избегать, если это возможно