在我的研究中,我發現沒有內置的功能在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