发布密钥时触发事件VBA

我有这个代码来检测何时按下Enter

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

我在这个macros中使用这个函数

 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键时,这被称为多次。 每次按下回车键时,是否只能调用一次该函数?

额外的信息,以防万一:为什么我需要它是因为我有一个数据条目,作为一种forms – 每次按下input键,它增加一个单元格值1,用于查找值。 但按住enter键将跳过logging。

当然有! 所有你需要的是跟踪Enter键切换 (注意返回值)。

后面的主要思想是跟踪低位( 切换/解除切换 ),每当它改变,高位为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