在 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 单元格中更新,这自然将其视为单击。我不明白哪里出了问题。
感谢您的帮助!
我已经想通了自己没有多次点击......代码在下面提到的过程中工作:
- 首先单击任何按钮 - 宏更新 J4 单元格中的所需值
- 第二次点击任何按钮 - 这次它交叉检查是否点击了同一个按钮,如果点击了同一个按钮,它将退出代码,否则它将更新 M4 单元格中的值.因此问题已解决!!
- 每次都遵循这个循环...
按照我使用的代码:
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
我有 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 单元格中更新,这自然将其视为单击。我不明白哪里出了问题。
感谢您的帮助!
我已经想通了自己没有多次点击......代码在下面提到的过程中工作:
- 首先单击任何按钮 - 宏更新 J4 单元格中的所需值
- 第二次点击任何按钮 - 这次它交叉检查是否点击了同一个按钮,如果点击了同一个按钮,它将退出代码,否则它将更新 M4 单元格中的值.因此问题已解决!!
- 每次都遵循这个循环...
按照我使用的代码:
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