如何以编程方式查找所谓的宏
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 提升到不同的水平,您可能还想阅读它。 :)
【讨论】:
以上是关于如何以编程方式查找所谓的宏的主要内容,如果未能解决你的问题,请参考以下文章