我有一个从电子表格函数(用户定义函数,UDF)调用的 VBA 宏。当从互联网下载电子表格并且用户已相应地设置“信任中心”设置时,电子表格将在所谓的“受保护视图”中打开。该函数将不会被调用。显示“启用编辑”按钮。如果按下按钮,则电子表格是“受信任的”并正常重新打开,开始计算,因此调用用户定义的函数。
但是,在该 VBA 函数中, 的Application.ActiveWorkbook
值为Nothing
。这可以在调试器中验证。
由于我只需要读取电子表格的一些属性(如路径名),因此我可以选择检查Application.ActiveProtectedViewWindow
哪些属性应引用工作簿的受保护版本的可用性。在调试器中,可以检查此对象。但是,在发行版中运行(没有调试)的值Application.ActiveProtectedViewWindow
也是Nothing
.
这两种行为——尤其是第一种——似乎是 Excel 2010 和 2013 中存在的错误(另请参见MSDN 论坛上的帖子)。
问题:有没有办法在启用编辑后获取活动工作簿的属性?
PS:作为对 Siddharth Rout 的良好观察的后续,“ThisWorkbook”可能会起作用:在我的情况下,宏不是开放式工作簿的一部分。UDF 在 XLA 中定义。因此,ThisWorkbook 将引用 XLA。我确实需要获取 ActiveWorkbook(= 调用 UDF 的工作簿)而不是 ThisWorkbook(= 运行 UDF 的工作簿)。
重要要求:
我的函数被称为用户定义函数,即执行顺序由 Excel 更新单元格确定。
该函数不是正在打开的工作簿的一部分。它是 XLA 的一部分。
我无法向打开的工作簿添加任何代码。