在 VBA 中单击和双击形状执行宏

Execute Macros on Single & Double Click on Shapes in VBA

我有 12 个形状命名(一月到十二月),我只有一个用于这些按钮的议程,如果单击一次形状,则必须在 J4 单元格中更新形状的名称,如果有任何形状是单击两次,形状的名称必须在 M4 单元格中更新。我研究了代码并试图从提供的答案之一 () 和我正在使用的以下代码中找出代码:

Public LastClickObj As String, LastClickTime As Date
Set Wb = ThisWorkbook
Set WsCharts = Wb.Sheets("Trend Charts")
Set UBMainChart = WsCharts.ChartObjects("UBMainChart")
Set UBMonthlyYTDSht = Wb.Worksheets("UM - Monthly & YTD Trend")
btnMonthName = WsCharts.Shapes(Application.Caller).Name

    If LastClickObj = "" Then
        LastClickObj = Application.Caller
        LastClickTime = CDbl(Timer)
    Else
        If CDbl(Timer) - LastClickTime > 0.25 Then
            LastClickObj = Application.Caller
            LastClickTime = CDbl(Timer)
            WsCharts.Range("J4").Value = btnMonthName
        Else
            If LastClickObj = Application.Caller Then
                MsgBox ("Double Click")
                LastClickObj = ""
                WsCharts.Range("M4").Value = btnMonthName
            Else
                LastClickObj = Application.Caller
                LastClickTime = CDbl(Timer)
            End If
        End If
    End If

问题是,即使我单击或双击,该值也仅在 J4 单元格中更新,这自然将其视为单击。我不明白哪里出了问题。

感谢您的帮助!

我已经想通了自己没有多次点击......代码在下面提到的过程中工作:

  1. 首先单击任何按钮 - 宏更新 J4 单元格中的所需值
  2. 第二次点击任何按钮 - 这次它交叉检查是否点击了同一个按钮,如果点击了同一个按钮,它将退出代码,否则它将更新 M4 单元格中的值.因此问题已解决!!
  3. 每次都遵循这个循环...

按照我使用的代码:

If LastClickObj = "" Then
    LastClickObj = Application.Caller
    WsCharts.Range("J4").Value = btnMonthName
Else
    If LastClickObj = Application.Caller Then
        Exit Sub
    Else
       WsCharts.Range("M4").Value = btnMonthName
       LastClickObj = ""
    End If
End If