我有这段代码来检测何时按 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将跳过记录。
答案 0 :(得分:4)
当然有!您只需跟踪Enter
键toggling(请注意返回值)。
其背后的主要思想是跟踪低位(切换/取消连接),并且每当它发生变化且高位为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