gpt4 book ai didi

当 protected View 中的 "Nothing"时,Excel VBA ActiveWorkbook 为 "Enable Editing"

转载 作者:行者123 更新时间:2023-12-02 03:44:31 25 4
gpt4 key购买 nike

我有一个从电子表格函数(用户定义函数,UDF)调用的 VBA 宏。当从互联网下载电子表格并且用户相应地设置“信任中心”设置时,电子表格将在所谓的“ protected View ”中打开。该函数将不会被调用。显示按钮“启用编辑”。如果按下按钮,电子表格将被“信任”并正常重新打开,开始计算,从而调用用户定义的函数。

但是,在该 VBA 函数中,Application.ActiveWorkbook 的值为 Nothing。这可以在调试器中验证。

由于我只需要读取电子表格的一些属性(如路径名),因此我也可以检查 Application.ActiveProtectedViewWindow 的可用性,它应该引用工作簿的 protected 版本。在调试器中,可以检查该对象。但是,在发布版(不带调试)中运行时,Application.ActiveProtectedViewWindow 的值也是Nothing

这两种行为(尤其是第一种行为)似乎是 Excel 2010 和 2013 中存在的错误(另请参阅 a post at the MSDN forum )。

Question: Is there a way to get hold of properties of the active workbook after it has been enabled for editing?

PS:作为 Siddharth Rout 的精彩观察的后续,“ThisWorkbook”可能会起作用:就我而言,宏不是开放式工作簿的一部分。 UDF 在 XLA 中定义。因此,本工作簿将引用 XLA。我确实需要获取 ActiveWorkbook(= 调用 UDF 的工作簿)而不是 ThisWorkbook(= 运行 UDF 的工作簿)。

重要要求:

  1. 我的函数被调用为用户定义函数,即执行顺序由 Excel 更新单元格决定。

  2. 该函数不是正在打开的工作簿的一部分。它是 XLA 的一部分。

  3. 我无法向打开的工作簿添加任何代码。

最佳答案

摘要: 该问题可以重现,并且有一些可能的解决方法。最有希望的一种方法(通过聊天得出)是使用 ActiveWindow.Parent 而不是 ActiveWorkbook

<小时/>

我能够复制这个问题。

我试过了

Private Sub Workbook_Open()
MsgBox "Application.ActiveWorkbook Is Nothing = " & _
CStr(Application.ActiveWorkbook Is Nothing)
End Sub

我得到了正确

但是,然后我尝试了这个,它给了我False

Private Sub Workbook_Open()
MsgBox "Application.ActiveWorkbook Is Nothing = " & _
CStr(Application.ThisWorkbook Is Nothing)
End Sub

现在回答您的问题...

Question: Is there a way to get hold of properties of the workbook after it has been enabled for editing?

是的。使用 ThisWorkbook 而不是 ActiveWorkbook

评论跟进

退出保护模式后工作簿完全加载后,您将能够访问ActiveWorkbook对象。要对此进行测试,请将此代码放入 protected 文件中。

Private Sub Workbook_Activate()
MsgBox "Application.ActiveWorkbook Is Nothing = " & _
CStr(Application.ActiveWorkbook Is Nothing)
End Sub

您会注意到您得到了False

因此,一旦您的工作簿加载,您​​的外接程序就可以使用 ActiveWorkbook 与打开的文件进行交互。

这是另一个测试

Private Sub Workbook_Activate()
MsgBox ActiveWorkbook.Path
End Sub

这就是我退出保护模式时得到的结果

enter image description here

聊天跟进

使用 ActiveWindow.Parent.Path 而不是 ActiveWorkbook.Path 可以解决问题。

关于当 protected View 中的 "Nothing"时,Excel VBA ActiveWorkbook 为 "Enable Editing",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19345600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com