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



我有12个名为(Jan到Dec(的形状,这些按钮只有一个议程,如果单击一次形状,则必须在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

最新更新