如何通过将鼠标悬停在单元格上来触发 Excel 宏?

如何通过将鼠标悬停在单元格上来触发 Excel 宏?

我一直无法弄清楚如何通过将鼠标移动到电子表格中的一个或多个单元格上来运行 Excel 宏。

答案1

虽然没有正式的 OnMouseOver 事件,但你可以编写一个 VBA 技巧来绕过它。它涉及使用 HYPERLINK 函数。有更多详细信息这里,但总结一下:

如果您创建一个新的 VBA 模块,然后添加一个用户定义函数来执行您想要的操作:

Public Function OnMouseOver()
 Sheet1.Range("A2").Value = "You hovered over a cell"
End Function

然后您可以通过 HYPERLINK 调用来访问它:

=IFERROR(HYPERLINK(OnMouseOver(),"Click here"), "Click here")

请注意,它被包装在 IFERROR 中以避免出现 #VALUE!错误消息,因为您的函数不应该更新单元格(但由于它在 HYPERLINK 中被调用,因此可以避免这种情况)。

答案2

Excel VBA 中没有 OnMouseOver。我不相信可以做到这一点。

答案3

HYPERLINK 方法很巧妙,非常精明,但仍然非常有限。例如,在 UDF 代码中,你甚至不能有 sStr = ""(注意,结果可能因 Excel 版本而异)。更好的方法是使用透明(甚至不透明)标签,它确实具有 MouseMove 属性。将代码放在那里。(我找到了一个视频链接,它几乎完美高效地在 4 分钟内一步一步地向你展示,甚至还有更好的评论;如果我在这里创建了一个分步指南,你将花费半个小时 :)。但是如果我显示该链接,Stack Exchange 将再次删除此帖子,因此如果您需要它,请给我发私信,我会在几天内回复。)

答案4

您可以在单元格上使用透明的 ActiveX 标签(,,.BackStyle = fmBackStyleTransparent)并处理其事件:.Caption = "".Visible = TrueMouseMove

Private Sub Label1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    Debug.Print Button, Shift, X, Y
End Sub

当Label的.Visible属性设置为False时,该MouseMove事件不会触发,但其后面的单元格可以被点击(反之亦然)。

相关内容