VBA F9按钮被识别出鼠标左键未被识别

时间:2019-03-15 19:17:45

标签: vba detect keypad

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

1 个答案:

答案 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

也就是说,就像其他人提到的那样,如果可能的话,通常应该避免像这样的忙循环