我在工作簿打开选项中有一个宏,用于检查用户是否有权访问该文件。但是,如果通过通知禁用了用户在信任中心中的宏设置(这是默认设置),则他可以访问该文件。无论宏设置如何,我该如何强制使代码执行?关闭后,我希望将设置重置为默认设置。
除了为每个用户启用宏设置外,我找不到任何好的解决方案。
答案 0 :(得分:2)
创建一个工作表,上面带有“未授权用户”消息。
在Workbook_BeforeSave
事件中,您可以看到此工作表,并使所有其他工作表都非常隐蔽
在Workbook_AfterSave
和Workbook_Open
事件中,您检查用户是否被授权。如果是这样,则可以使正常的工作表可见,并使“用户未授权”工作表非常隐蔽。
确保您的VBA项目受保护。然后,如果用户打开禁用了宏的工作簿,他们将只能看到“用户未授权”消息。 (您还可以添加一行,例如“如果您认为收到此错误消息,请确保为此工作簿启用了宏”)
答案 1 :(得分:2)
拥有一个介绍性工作表(我们称其为“宏”),并带有一条消息,指出必须启用宏才能继续。使该工作表可见,所有其他工作表都非常隐蔽。
在ThisWorkbook模块中,包括以下两个子项:
Private Sub Workbook_Open()
Call MacrosOK ' Will only be called if macros are indeed OK.
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
' Ensures that the macro sheet is always set to the default view when the workbook is saved
Application.ScreenUpdating = False
Sheets("Macros").Visible = True ' Make the macro warning sheet visible
Dim sht As Worksheet
Application.ScreenUpdating = False
For Each sht In ThisWorkbook.Worksheets
If Not sht.Name = "Macros" Then sht.Visible = xlVeryHidden ' Hide all other sheets
Next sht
Application.ScreenUpdating = True
End Sub
然后在常规模块中:
Sub MacrosOK()
' Called on open, or otherwise when macros are enabled
Dim sht As Worksheet
Application.ScreenUpdating = False
For Each sht In ThisWorkbook.Worksheets
sht.Visible = xlSheetVisible ' Make all sheets visible
Next sht
Sheets("Macros").Visible = xlVeryHidden ' Hide your macro check sheet
Application.ScreenUpdating = True
End Sub
您可能希望在Macro工作表上包含一个标记为“继续”(或类似名称)的按钮,该按钮链接到MacrosOK子菜单,以使用户能够在未自动触发时手动进行操作。