我在 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 文件在受保护的视图中打开,因为它是由 Web 应用程序生成并由用户在使用前下载的。
是什么导致在 excel 2013 中启用宏的这些不同方式(消息栏与弹出窗口)?它们之间的行为差异是什么?
提前致谢。
问候,