excel 2013 中的微软 excel 安全通知弹窗和消息栏有什么区别?
What are the differences between the microsoft excel security notice popup and the message bar in excel 2013?
我在 excel 工作簿中开发 VBA 功能时遇到问题。
此工作簿适合没有管理权限的最终用户使用,他们需要激活此特定工作簿上的宏才能使用它。
为此,我做了以下工作:
- 我创建了一个“临时主页工作表”,它要求用户激活宏(没有代码,此工作表的单元格中的一条简单消息),它最初是可见的
- 我创建了一个“主页工作表”,它最初是(非常)隐藏的,其中包含可以使用的按钮和其他控件
- 我写了一个简单的子程序,叫做:
- 当工作簿打开且活动表为“临时主工作表”时
- 或者当“临时主页工作表”被激活时
- 此子执行以下操作(参见下面的代码):
- 隐藏“临时主页工作表”(非常隐藏)
- 显示“主页工作表”
这可以:
- 如果 he/she 尚未激活宏,则显示一条消息要求用户激活宏
- 重定向到目标 “主工作表” 如果用户在 “临时主工作表” 激活时激活宏
- 重定向到目标 “主工作表” 如果宏被激活并且用户激活 “临时主工作表”
' 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 编辑器。因此,我无法判断此解决方法是否有效,但没有理由不这样做。
我在 excel 工作簿中开发 VBA 功能时遇到问题。 此工作簿适合没有管理权限的最终用户使用,他们需要激活此特定工作簿上的宏才能使用它。
为此,我做了以下工作:
- 我创建了一个“临时主页工作表”,它要求用户激活宏(没有代码,此工作表的单元格中的一条简单消息),它最初是可见的
- 我创建了一个“主页工作表”,它最初是(非常)隐藏的,其中包含可以使用的按钮和其他控件
- 我写了一个简单的子程序,叫做:
- 当工作簿打开且活动表为“临时主工作表”时
- 或者当“临时主页工作表”被激活时
- 此子执行以下操作(参见下面的代码):
- 隐藏“临时主页工作表”(非常隐藏)
- 显示“主页工作表”
这可以:
- 如果 he/she 尚未激活宏,则显示一条消息要求用户激活宏
- 重定向到目标 “主工作表” 如果用户在 “临时主工作表” 激活时激活宏
- 重定向到目标 “主工作表” 如果宏被激活并且用户激活 “临时主工作表”
' 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 编辑器。因此,我无法判断此解决方法是否有效,但没有理由不这样做。