我想单独处理VBA中ActiveX按钮的单击和双击事件。我的问题是单击和双击都会调用单击事件。有没有办法在双击事件发生时抑制/绕过单击过程?我确定这是一个简单的答案,但无法在网上找到任何内容......
答案 0 :(得分:0)
来自帮助
如果Click事件中有代码,DblClick事件将永远不会触发,因为Click事件是第一个在两者之间触发的事件。因此,Click事件拦截了鼠标单击,因此DblClick事件不会发生。
尝试捕获鼠标按下和鼠标向上,等待500毫秒,如果没有鼠标按下,则只需单击一下,如果有等待鼠标按下的时间。
DoubleClickSpeed HKCU \控制面板\鼠标
数据类型范围默认值 REG_SZ 100 - 900(十进制毫秒)500
答案 1 :(得分:0)
Brad Yundt在this 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