如何通过左键单击而不是 excel 中的单元格来启动宏?
How to start macro with a left click NOT on a cell in excel?
2 天以来,我一直在努力寻找如何执行以下操作,但没有找到任何符合目标的方法:
顺序步骤:
- 用户打开excel文件
- 他在以下之间做出了选择:
- 直接在工作表中粘贴图片(可能是受限区域)
- 激活工作簿中的一些视频(开始时可能是网络摄像头)
- 他 select 有一个按钮来激活他的点击检测
- 他点击图片任意位置,我得到点击点的坐标
到目前为止,我已经看到人们使用(并测试了自己):
鼠标事件 ==> 这不起作用,因为我需要知道他正在单击的内容的名称,这可能是他刚刚粘贴的全新图片
BeforeDoubleClick(同样,我宁愿避免双击,但即便如此,当我点击单元格以外的其他东西时它也不起作用)
Selectionchange ==> 如果我不点击单元格则不起作用
在我想要的区域放置隐藏按钮:如果按钮不可见,我无法点击它,如果我把它设为透明,当我点击它时它会变得可见
如果有人对此有想法...
(注意:我不是 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
2 天以来,我一直在努力寻找如何执行以下操作,但没有找到任何符合目标的方法:
顺序步骤:
- 用户打开excel文件
- 他在以下之间做出了选择:
- 直接在工作表中粘贴图片(可能是受限区域)
- 激活工作簿中的一些视频(开始时可能是网络摄像头)
- 他 select 有一个按钮来激活他的点击检测
- 他点击图片任意位置,我得到点击点的坐标
到目前为止,我已经看到人们使用(并测试了自己):
鼠标事件 ==> 这不起作用,因为我需要知道他正在单击的内容的名称,这可能是他刚刚粘贴的全新图片
BeforeDoubleClick(同样,我宁愿避免双击,但即便如此,当我点击单元格以外的其他东西时它也不起作用)
Selectionchange ==> 如果我不点击单元格则不起作用
在我想要的区域放置隐藏按钮:如果按钮不可见,我无法点击它,如果我把它设为透明,当我点击它时它会变得可见
如果有人对此有想法... (注意:我不是 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