我设计了以下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
但是这会导致应用程序挂起。我的猜测是提示被隐藏,并不会像通常那样自动保存文件。如何强制它保存文件并覆盖现有文件,以便它不会挂起?
答案 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