【发布时间】:2016-07-05 14:05:33
【问题描述】:
在我的研究中,我发现没有内置功能可以在 Excel 工作表上的形状上启用双击事件。我看到的许多解决方法都涉及编写类或其他类似的东西来添加此功能,所有这些似乎都超出了我的 VBA 知识库。因此,我编写了上面的代码(目前只是作为测试)来尝试为形状编写我自己的双击功能。
Public Clicked As Boolean, LastClickObj As String, LastClickTime As Date
Sub GenerateShapes()
Dim sheet1 As Worksheet, shape As shape
Set sheet1 = ThisWorkbook.Worksheets("Sheet1")
Set shape = sheet1.Shapes.AddShape(msoShapeDiamond, 50, 50, 5, 5)
shape.OnAction = "ShapeDoubleClick"
Set shape = sheet1.Shapes.AddShape(msoShapeRectangle, 50, 60, 5, 5)
shape.OnAction = "ShapeDoubleClick"
LastClickTime = Now
End Sub
Sub ShapeDoubleClick()
If Second(Now) - Second(LastClickTime) > 0.5 Then
Clicked = False
LastClickObj = ""
LastClickTime = Now
Else
If Not Clicked Then
Clicked = True
LastClickObj = Application.Caller
ElseIf LastClickObj = Application.Caller Then
MsgBox ("Double Click")
Clicked = False
LastClickObj = ""
LastClickTime = Now - 1
Else
LastClickObj = Application.Caller
Clicked = True
LastClickTime = Now
End If
End If
End Sub
但是,考虑到我合并计时器的方式,如果我快速连续单击 3 次,代码通常只会执行“双击”。我认为这与我如何处理Clicked 的超时“重置”有关,但逻辑可能存在其他问题。关于如何正确实现此功能的任何想法无需其他大量添加(如类等)?
【问题讨论】: