我想在 Excel 加载项中编写一个小日志记录函数,我将从许多不同的工作簿中调用该函数。我希望能够通过仅传递日志文本来调用它,并且日志函数本身可以处理时间戳,工作簿名称, etc.
但是,我无法使用 ThisWorkbook 或 ActiveWorkbook 来确定哪个工作簿负责进行调用,因为 Thisworkbook 将返回对加载项本身的引用,而在 Excel 中具有活动焦点的工作簿以外的工作簿中运行的 VBA 代码可以进行调用,但 ActiveWorkbook 将返回窗口中具有焦点的工作簿。
Application.Caller 看起来是一个可能的解决方案,但这似乎仅在从单元格而不是从 VBA 调用该函数时才有效。
我想做的事情是不可能的吗?
Update
据 > 1 人介绍,这实际上是不可能的。如果有人碰巧知道一些聪明的解决方法,请说出来。
好的,正确阅读问题后我会再试一次......
那么,陈述一下问题:
您想要一个用外接程序编写的例程,当从另一个工作簿中的 vba 调用时,可以计算出(除其他外)哪个工作簿包含进行调用的 vba,而无需显式传递此信息。
如上所述,这是不可能的(这是与从代码访问调用堆栈类似的问题:据我所知这是不可能的)
然而你几乎可以像这样得到你想要的
像这样声明你的日志函数:
Sub MyLogger(wb as Workbook, LogText as String)
Dim CallerName as String
CallerName = wb.name
' your code...
End Sub
然后无论你在哪里调用 sub 使用
MyLogger ThisWorkbook, "Log Text"
不如什么都不传递,但至少总是一样的
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)