如何以编程方式查找所谓的宏

Posted

技术标签:

【中文标题】如何以编程方式查找所谓的宏【英文标题】:How to programatically find what has called a macro 【发布时间】:2014-10-29 15:55:02 【问题描述】:

我正在尝试编写一个宏,该宏的一部分反应不同,具体取决于它是直接从工作表中的按钮调用,还是从另一个宏间接调用。我还希望能够让它根据其他宏调用它而做出不同的反应

在这种情况下,如果宏是通过按钮手动激活的,或者如果它已经被某个特定的其他宏运行,它会弹出一个 msgbox 让用户知道它已经成功完成,但如果相同的宏由另一个宏运行,那么我想跳过这一步。

有没有办法做到这一点?

【问题讨论】:

也许Application.Caller可以用? link @Sociithat:这是一个有效的答案。 :) 我正要发布一个答案。您可能希望将其发布为答案。包括一个示例代码:D 这不会给你调用宏的名称。 True @rory 但问题是要确定它叫什么?过程或形状 @SiddharthRout 这只是其中的一部分:“我还希望能够让它根据其他宏调用它而做出不同的反应” 【参考方案1】:

您可以通过将参数传递给子例程来做到这一点。这是一个非常基本的示例:

Sub test(number, displayMessage)
MsgBox ("The number is " & number)
If displayMessage Then MsgBox ("You ran the B sub")
End Sub

Sub aSub()
Call test(4, False)
End Sub

Sub bSub()
Call test(7, True)
End Sub

尝试同时运行 aSub 和 bSub。希望这会有所帮助。

【讨论】:

这是我喜欢的方式。为每个入口点设置单独的入口程序,而不是为每个入口点设置一个程序。对我来说,它使代码更简洁,更易于维护。 我想我可能不得不这样做。我想我希望有类似于Application.Caller 的东西可以显示调用子,但我开始认为它不存在。【参考方案2】:

这是一种适用于形状/程序的方法

Dim SSub As String

Sub Sample()
    On Error Resume Next
    SSub = Application.Caller '<~~ Already suggested by @Socii
    On Error GoTo 0

    Debug.Print "This procedure was called by " & SSub
End Sub

Sub Example()
    SSub = "Example" '~~> (Also see the link below)
    Sample
End Sub

如果您想将THIS 提升到不同的水平,您可能还想阅读它。 :)

【讨论】:

以上是关于如何以编程方式查找所谓的宏的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式查找 Android 版本名称?

如何使用私有核心图形方法以编程方式缩放屏幕(如何查找函数参数)

如何以编程方式查找设备的公共 IP 地址? [复制]

如何以编程方式精确查找 PPI

如何在 C/C++ 中以编程方式查找“保存的游戏”文件夹?

如何以编程方式查找已加载共享库的版本?