我想在Excel加载项中编写一个小记录函数,因为我将从许多不同的工作簿中调用。我希望能够通过仅传递日志文本来调用它,并且日志函数本身可以处理时间戳, workbookname 等。 但是,我不能使用本网站或ActiveWorkbook来确定哪位工作簿负责拨打电话,因为Timworkbook将返回对加载项的引用,而在工作簿以外的工作簿中运行的VBA代码在Excel中可以拨打电话,但是ActiveWorkbook将返回一个侧重于窗口的那个。

application.caller看起来像一个可能的解决方案,但这似乎只有在从单元格中调用函数时,而不是从VBA。

是我想要做什么不可能的?

更新

根据> 1人,这实际上是不可能的。如果有人碰巧知道一些聪明的解决方法,请发表讲话。

有帮助吗?

解决方案

好的,因此,正确阅读问题后,我会重试...

因此,要说明问题:

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

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

但是,您几乎可以得到想要的东西

像这样声明您的日志功能: 通用标签

那么无论您在哪里使用次级使用, 通用标签

不如不传递任何东西,但至少它总是一样的

其他提示

要获取调用工作簿的名称,请使用 通用标签

Application.Caller返回有关如何调用Visual Basic的信息。如果是通过在单个单元格中输入的自定义函数调用的,则返回一个用于指定该单元格的Range对象

已经引用了该单元格,.Worksheet.Parent.Name为您提供了工作簿的名称

请注意,Application.Caller将根据函数的调用方式返回其他内容(有关详细信息,请参见VBA帮助)

在由Excel工作表数组输入的函数调用调用的外接函数中,我发现“ Application.Caller.Parent.name”给出了工作表名称(表名,而不是工作表编号)。

编码自定义函数时,我遇到了同样的问题。该函数运行良好,但是无论何时计算或激活另一个工作簿,使用该函数的所有单元格都将恢复为#value。使用此公式处理多个文件时,可能会非常沮丧。

要获取我使用的工作簿: 通用标签

如果您的函数位于单元格中,这应该可以工作。

对于原始帖子为时已晚,但可能会对其他人有所帮助!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top