释放键时触发事件 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,用于查找值。但是按住回车键会跳过记录。
当然有!您只需要跟踪 Enter
键 toggling(注意 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
我有这段代码可以检测何时按下 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,用于查找值。但是按住回车键会跳过记录。
当然有!您只需要跟踪 Enter
键 toggling(注意 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