在我的研究中,我发现没有内置的功能在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
然而,鉴于我encorporated定时器,代码往往只会执行“双击”如果我在快速连续点击三次的方式。我认为这与我如何处理Clicked
的超时“重置”有关,但逻辑可能存在其他问题。任何想法如何正确实施此功能没有其他广泛的添加(像类和类似的)?
哈!我还认为点击是三重点击的问题 - 你找到了很好的解决方案。这是一个很好的谜题! –
@DavidG选择使用一个计时器,因为它需要几秒钟的时间从午夜开始(因此如果两次点击交叉午夜是唯一可能发生的跳闸,在这种情况下这是非常不可能的) – RGA