如何使用代码在信任中心启用宏设置

时间:2019-04-10 12:02:16

标签: excel vba

我在工作簿打开选项中有一个宏,用于检查用户是否有权访问该文件。但是,如果通过通知禁用了用户在信任中心中的宏设置(这是默认设置),则他可以访问该文件。无论宏设置如何,我该如何强制使代码执行?关闭后,我希望将设置重置为默认设置。

除了为每个用户启用宏设置外,我找不到任何好的解决方案。

2 个答案:

答案 0 :(得分:2)

创建一个工作表,上面带有“未授权用户”消息。

Workbook_BeforeSave事件中,您可以看到此工作表,并使所有其他工作表都非常隐蔽

Workbook_AfterSaveWorkbook_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子菜单,以使用户能够在未自动触发时手动进行操作。

相关问题