可以告诉Excel加载项中哪个工作簿称为函数(xla)

tbo*_*one 7 excel vba xla excel-vba excel-addins

我想在excel加载项中编写一个小日志功能,我将从许多不同的工作簿中调用它.我希望能够通过仅传递日志文本来调用它,并且日志函数本身可以处理时间戳,工作簿名称等.

但是,我不能使用ThisWorkbook或ActiveWorkbook来确定哪个工作簿负责进行调用,因为Thisworkbook将返回对加载项本身的引用,而在工作簿中运行的VBA代码可以在Excel中主动关注的工作簿中运行进行调用,但ActiveWorkbook将返回窗口中具有焦点的那个.

Application.Caller看起来像一个可能的解决方案,但这似乎仅在从单元格调用函数时才起作用,而不是从VBA调用.

我想做什么不可能?

更新

根据> 1人,这实际上是不可能的.如果有人碰巧知道一些聪明的解决方法,请大声说出来.

chr*_*sen 4

好吧,正确阅读问题后我会再试一次......

那么,陈述一下问题:

您想要一个用外接程序编写的例程,当从另一个工作簿中的 vba 调用时,可以计算出(除其他外)哪个工作簿包含进行调用的 vba,而无需显式传递此信息。

如上所述,这是不可能的(这是与从代码访问调用堆栈类似的问题:据我所知这是不可能的)

然而你几乎可以像这样得到你想要的

像这样声明你的日志函数:

Sub MyLogger(wb as Workbook, LogText as String)
    Dim CallerName as String
    CallerName = wb.name
    ' your code...
End Sub
Run Code Online (Sandbox Code Playgroud)

然后无论你在哪里调用 sub 使用

MyLogger ThisWorkbook, "Log Text"
Run Code Online (Sandbox Code Playgroud)

不如什么都不传递,但至少总是一样的