【发布时间】:2013-10-13 13:05:42
【问题描述】:
我有一个从电子表格函数(用户定义函数,UDF)调用的 VBA 宏。当从互联网下载电子表格并且用户已相应地设置“信任中心”设置时,电子表格将在所谓的“受保护视图”中打开。该函数将不会被调用。显示“启用编辑”按钮。 如果按下按钮,则电子表格是“受信任的”并正常重新打开,开始计算,并因此调用用户定义的函数。
但是,在该 VBA 函数中,Application.ActiveWorkbook 的值是 Nothing。这可以在调试器中验证。
由于我只需要读取电子表格的一些属性(如路径名),我可以选择检查 Application.ActiveProtectedViewWindow 的可用性,它应该引用工作簿的受保护版本。在调试器中,可以检查此对象。但是,在发行版中运行(没有调试)Application.ActiveProtectedViewWindow 的值也是Nothing。
这两种行为——尤其是第一种——似乎是 Excel 2010 和 2013 中存在的错误(另请参阅 a post at the MSDN forum)。
问题:有没有办法在启用编辑后获取活动工作簿的属性?
PS:作为对 Siddharth Rout 的精彩观察的后续,“ThisWorkbook”可能会起作用:在我的情况下,宏不是打开的 Workbook 的一部分。 UDF 在 XLA 中定义。因此,ThisWorkbook 将引用 XLA。我确实需要获取 ActiveWorkbook(= 调用 UDF 的工作簿)而不是 ThisWorkbook(= 运行 UDF 的工作簿)。
重要要求:
我的函数被称为用户定义函数,即执行顺序由 Excel 更新单元格决定。
该函数不是正在打开的工作簿的一部分。它是 XLA 的一部分。
我无法向打开的工作簿添加任何代码。
【问题讨论】:
-
工作簿是在浏览器中还是从 Excel 应用程序中打开的?我只有在浏览器中打开时才遇到这种情况。试试这个实验。在 Excel 中打开 URL。
-
工作簿是 ZIP 文件的一部分。 zip 文件下载到 Window 7 主机。 zip 文件被解压到一个目录中。然后,Windows 7 会将文件“标记”为从 Internet 源获取,Excel 2013 将在“受保护的视图”中打开 XLS 文件。这是 Windows 7/Excel 默认行为。大多数“用户”都会以这种方式下载并打开它……(不是我,是我的用户打开文件)。