如何通过左键单击而不是 excel 中的单元格来启动宏?

How to start macro with a left click NOT on a cell in excel?

2 天以来,我一直在努力寻找如何执行以下操作,但没有找到任何符合目标的方法:

顺序步骤:

  1. 用户打开excel文件
  2. 他在以下之间做出了选择:
  1. 他 select 有一个按钮来激活他的点击检测
  2. 他点击图片任意位置,我得到点击点的坐标

到目前为止,我已经看到人们使用(并测试了自己):

如果有人对此有想法... (注意:我不是 vba 的专业人士,所以我可能漏掉了一些东西)

只是忘了:我的问题不是获取鼠标的坐标,它只是在我需要时触发宏,现在我只是尝试获取一个简单的消息框以查看触发器是否有效。

如果有人有任何想法,谢谢 BR

不确定这是否符合您的需要(例如无法用视频进行测试)。

a) 在您的 sheet 上放置一个任何类型的“按钮”。我通常为此使用方形并对其进行一些格式化(颜色、阴影、文本)。将子例程SetEvents分配给它。

b) 声明一个记住 click-activation 处于活动状态的全局变量

Option Explicit
Global EventCatchingActive As Boolean

c) 在按钮的事件例程中,为 sheet 的所有形状设置 OnAction 方法 - 请参阅例程 setEvents。这确保即使是新添加的图像也能处理点击事件。

Sub setEvents()
    ' This routine is called from the magic button.
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets(1)  ' Set this to whatever sheet you need
    
    Dim button As Shape
    Set button = ws.Shapes(Application.Caller)
    
    If EventCatchingActive Then
        EventCatchingActive = False
        button.TextFrame2.TextRange.Characters.Text = "Start Clicking"
    Else
        Debug.Print "Setting EventHandler"
        Dim sh As Shape
        For Each sh In ThisWorkbook.Sheets(1).Shapes
            ' Debug.Print sh.Name, sh.Type
            If sh.Name <> button.Name Then sh.OnAction = "ClickedMe"
        Next
        EventCatchingActive = True
        button.TextFrame2.TextRange.Characters.Text = "Stop Clicking"
    End If
End Sub

d) 声明一个例程,如果单击任何形状,该例程将被调用。使用 Application.Caller 你可以检查点击了什么。

Sub ClickedMe(Optional target As Range = Nothing)
    If Not EventCatchingActive Then Exit Sub
    If target Is Nothing Then
        Debug.Print "I clicked on " & Application.Caller
    Else
        Debug.Print "I clicked on cell " & target.Address
    End If
End Sub

(注意步骤 b) 到 d) 的代码进入常规模块)

e) 如果您还想处理单元格上的点击,请将以下内容添加到您正在处理的作品sheet 的sheet-module 中。

Private Sub Worksheet_SelectionChange(ByVal target As Range)
    ClickedMe target
End Sub