打开时自动保护Excel工作簿:ProtectSharing提示导致代码执行挂起



我设计了以下VBA代码,以便在打开时运行,以检查工作簿的保护是否处于活动状态,如果没有,则对工作表和工作簿应用保护:

    If Not ActiveWorkbook.ProtectWindows Or ActiveWorkbook.ProtectStructure Then
        For Each WS In ThisWorkbook.Worksheets
            If WS.ProtectContents = False Then WS.Protect Password:="Password"
        Next WS
        ThisWorkbook.ProtectSharing Password:="Password", SharingPassword:="Password"
    End If

它运行正常,没有任何问题,只是在为工作簿启用保护和共享时,它会显示一条消息,说明文件已经存在,并询问我是否要覆盖它。

如果我与提示交互并告诉它覆盖文件,它会按预期操作,但我不想与提示交互。

我试图用抑制提示

    Application.DisplayAlerts = False

但这会导致应用程序一直处于打开状态。我的猜测是,提示是隐藏的,不会像通常保存为提示那样自动保存文件。如何强制它保存文件并覆盖现有文件,使其不会挂起?

原来我必须将Application.DisplayAlerts代码放在有问题的代码的正上方和正下方。

If (Not ActiveWorkbook.ProtectWindows) Or (Not ActiveWorkbook.ProtectStructure) Then
    For Each WS In ThisWorkbook.Worksheets
        If WS.ProtectContents = False Then WS.Protect Password:="Password"
    Next WS
    Application.DisplayAlerts = False
    ThisWorkbook.ProtectSharing SharingPassword:="Password"
    Application.DisplayAlerts = True
End If

最新更新