密钥释放VBA时触发事件

时间:2017-09-18 08:22:33

标签: excel vba excel-vba keyup

我有这段代码来检测何时按 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 键时,会多次调用此方法。 有没有办法只在每次按下回车键时调用此功能一次?

其他信息以防万一: 为什么我需要它是因为我有一个dataentry工作表,它作为一个表单 - 每次按下回车键,它会将单元格值增加1,用于查找值。但按住Enter将跳过记录。

1 个答案:

答案 0 :(得分:4)

当然有!您只需跟踪Entertoggling(请注意返回值)。

其背后的主要思想是跟踪低位(切换/取消连接),并且每当它发生变化且高位为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