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