VBA代码“ WaitUntilF9Key”在按下“ F9”键时会检测到按下,直到按下时才检测。 “ WaitUntilLButton”立即触发,而不是在按下左键盘按钮时触发。为什么会这样呢? Tkx
Option Compare Database
Option Explicit
Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
Public Const VK_LBUTTON = &H1
Public Const VK_RBUTTON = &H2
Private Const VK_F9 = &H78
Sub WaitUntilF9Key()
Do Until GetAsyncKeyState(VK_F9)
DoEvents
Loop
MsgBox ("Ta Da")
End Sub
Sub WaitUntilLButton()
Do Until GetAsyncKeyState(VK_LBUTTON)
DoEvents
Loop
MsgBox ("Ta Da")
End Sub
答案 0 :(得分:2)
GetAsyncKeyState返回一个字节,而不是布尔值。您需要“和”它与您想要的一点以获得有意义的结果。
在您的情况下,您想要的位是&H8000。从Microsoft文档获取GetAsyncKeyState:
如果将返回值的&H8000位置1,则自上次调用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
也就是说,就像其他人提到的那样,如果可能的话,通常应该避免像这样的忙循环