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

时间:2016-08-07 12:25:25

标签: excel vba excel-vba

我设计了以下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

但是这会导致应用程序挂起。我的猜测是提示被隐藏,并不会像通常那样自动保存文件。如何强制它保存文件并覆盖现有文件,以便它不会挂起?

1 个答案:

答案 0 :(得分:1)

事实证明我必须将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