excel 2013 中的微软 excel 安全通知弹窗和消息栏有什么区别?

What are the differences between the microsoft excel security notice popup and the message bar in excel 2013?

我在 excel 工作簿中开发 VBA 功能时遇到问题。 此工作簿适合没有管理权限的最终用户使用,他们需要激活此特定工作簿上的宏才能使用它。

为此,我做了以下工作:

这可以:

' Code to hide temporary ws and show target ws

Private Sub setTargetVisibility()

    Dim ws As Excel.Worksheet
    
    ThisWorkbook.Activate
    
    Set ws = ThisWorkbook.Sheets(getParm("tempHomeWSName"))
    With ws
        .Visible = xlSheetVeryHidden
    End With
    
    Set ws = ThisWorkbook.Sheets(getParm("homeWSName"))
    With ws
        .Visible = xlSheetVisible
        .Activate
    End With

End Sub

这在大多数情况下工作正常,因为用户会通过消息栏收到激活宏的提示:

但是,他们有时会收到另一个激活宏的提示:Microsoft excel 安全通知弹出窗口。每当他们通过此弹出窗口激活宏时,他们都会在上面的代码子中收到运行时错误 1004(例如,_workbook 对象的方法 Activate 失败)。

编辑:需要注意的重要一点是,此 excel 文件是在受保护的视图中打开的,因为它是由网络应用程序生成并由用户在使用前下载的。

是什么原因导致 excel 2013 年启用宏的方式不同(消息栏与弹出窗口)?它们之间的行为差​​异是什么?

提前致谢。

此致,

默认情况下,当您第一次打开 macro-enabled 工作簿时,您会看到一个黄色的 “安全警告” 栏出现在功能区下方。单击 “启用内容” 按钮将启用宏。

  • 这将在打开工作簿时触发任何 运行 的宏,因此请不要误按此按钮!

如果在打开带有宏的文件时 Visual Basic 编辑器处于打开状态,将显示 Microsoft Excel 安全通知。

  • 如果您信任文件来源并且知道所有宏都是安全的,请单击“启用内容”或“启用宏”按钮。 这将打开宏并使文件成为受信任的文档。下次打开工作簿时,将不会出现安全警告。
  • 如果文件来源未知且您不想启用宏,可以单击'X'按钮关闭安全警告。警告将消失,但宏将保持禁用状态。任何对 运行 宏的尝试都会导致以下 message

正如@David Donayo 在接受的答案中提到的那样,触发 Microsoft Excel 安全通知弹出窗口与消息栏警告的原因是 VBA 编辑器已经为另一个打开xlsm 文件。

导致我的问题(尝试在 WorkbookOpen 事件中进行对象模型调用(例如 Application.Calculate 或 ThisWorkbook.Activate 时出现运行时错误 1004)的原因是此处描述的问题 (https://support.microsoft.com/en-us/help/2745652/object-model-calls-may-fail-from-workbookopen-event-when-exiting-prote)在 excel 2013 年退出受保护视图时仍然存在,然后通过 Microsoft Excel 安全通知激活宏。

当退出受保护的视图并通过消息栏警告激活宏时,不会出现此问题。

我没有实施上面 link 中描述的解决方法(如果在受保护的视图中打开工作簿,则将对象模型调用从 WorkbookOpen 事件延迟到 WorkbookActivate 事件),因为在我的上下文中最终用户不应该打开 VBA 编辑器。因此,我无法判断此解决方法是否有效,但没有理由不这样做。