在VBA中处理activeX按钮上的单击和双击事件

时间:2014-12-26 02:55:56

标签: vba mouseclick-event

我想单独处理VBA中ActiveX按钮的单击和双击事件。我的问题是单击和双击都会调用单击事件。有没有办法在双击事件发生时抑制/绕过单击过程?我确定这是一个简单的答案,但无法在网上找到任何内容......

3 个答案:

答案 0 :(得分:0)

来自帮助

  

如果Click事件中有代码,DblClick事件将永远不会触发,因为Click事件是第一个在两者之间触发的事件。因此,Click事件拦截了鼠标单击,因此DblClick事件不会发生。

尝试捕获鼠标按下和鼠标向上,等待500毫秒,如果没有鼠标按下,则只需单击一下,如果有等待鼠标按下的时间。

DoubleClickSpeed HKCU \控制面板\鼠标

数据类型范围默认值 REG_SZ 100 - 900(十进制毫秒)500

答案 1 :(得分:0)

Brad Yundtthis post中的Experts-Exchange提供了这个聪明的解决方法。

我以为你问过这个问题,如果我弄错了,请告诉我

  

您可以尝试使用Application.OnTime来安排对a的响应   在说了1秒延迟之后,左击。如果是双击或右击   同时发生,然后是OnTime子中的leftclick事件   不会发生。

     

以下代码位于正在监视的工作表的代码窗格中。请注意,它使用该工作表的代码名称,而不是选项卡名称。

     

如上所述,代码在单个单元格上观察左键单击,右键单击或双击单击A1:A10。然后它会显示一个消息框,命名单击的单元格和点击类型。

工作表事件代码

Dim bTrapped As Boolean
Dim cel As Range, rgWatch As Range

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(cel, Target) Is Nothing Then
    MsgBox "Doubleclick at " & cel.Address
    bTrapped = True
    Cancel = True
End If
End Sub

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(cel, Target) Is Nothing Then
    MsgBox "Rightclick at " & cel.Address
    bTrapped = True
    Cancel = True
End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim targ As Range
Set rgWatch = Range("A1:A10")
Set targ = Intersect(Target, rgWatch)
If Not targ Is Nothing Then
    If targ.Cells.Count = 1 Then
        bTrapped = False
        Set cel = targ.Cells(1, 1)
            'Allow 1 second for user to complete a rightclick or doubleclick before trapping leftclick
        Application.OnTime Now + 1 / 86400, "Sheet1.DelayedWatch"       'Note that Sheet1 is codename for worksheet (not tabname)
    End If
End If
End Sub

Private Sub DelayedWatch()
If bTrapped = False Then
    MsgBox "Leftclick at " & cel.Address
End If
End Sub

答案 2 :(得分:0)

我知道此答复要晚了几年,但是为了取消一个事件,以防止发生另一个事件(在同一事件上)(即,防止在您单击双击时发生单击),请执行以下操作; < / p>

Private Sub CheckBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)

        'Do your stuff in here to handle the doubleClick event

        Cancel = True 'send back a true boolean to cancel the singleClick

End Sub