释放键时触发事件 VBA

Fire events when key is released VBA

我有这段代码可以检测何时按下 Enter

Private Declare Function GetKeyState Lib "user32" _
(ByVal nVirtKey As Long) As Integer
   Const VK_RETURN As Integer = &HD

我在这样的宏中使用这个函数

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   If GetKeyState(VK_RETURN) < 0 Then Enter = True Else Enter = False
   If Enter = True Then
       Call IncreaseValue
   End If
End Sub

然而,当 Enter 键被按下时,它会被多次调用。 有没有办法每次按回车键只调用一次这个函数?

以防万一的附加信息: 为什么我需要它是因为我有一个数据输入 sheet,它作为一个表单工作 - 每次按下回车键时,它都会将单元格值增加 1,用于查找值。但是按住回车键会跳过记录。

当然有!您只需要跟踪 Entertoggling(注意 return 值)。

其背后的主要思想是跟踪低位(toggle/untoggle),每当它发生变化且高位为1时(按下) - 我们可以自由地增加我们想要的东西。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Static StatePreservedResponse As Long
    Dim StateResponse As Long

    StateResponse = GetKeyState(VK_RETURN)

    If StateResponse < 0 And StateResponse <> StatePreservedResponse Then
        Call IncreaseValue
    End If

    StatePreservedResponse = StateResponse
End Sub