【发布时间】:2021-09-27 01:00:25
【问题描述】:
下面的代码取消保护工作簿中的所有工作表,并且只提示输入一次密码。
我想要实现的是:
如果用户在密码输入窗口按“取消”,子程序退出。 如果用户在没有输入任何内容的情况下按“ok”,它的行为应该与输入错误密码相同,即转到错误弹出窗口。
问题在于按“确定”或“取消”时,它的行为与上述不同,相反,在这两种情况下,它都会再显示 3 次默认密码提示,每张纸 1 次。
我正在努力完善 if/then 逻辑,并且已经多次交换了一些东西,几乎到了那里,但从未完全做到。
Sub UnprotectAllSheets()
Dim ws As Worksheet
Dim pass As String
If ActiveSheet.ProtectContents = False Then
MsgBox "Already Unprotected"
Exit Sub
Else
pass = InputBox("Password?")
On Error GoTo Popup:
For Each ws In ThisWorkbook.Worksheets
ws.Unprotect pass
Next ws
If ActiveSheet.ProtectContents = False Then
MsgBox "Sheets now Unprotected"
ElseIf StrPtr(pass) = "" Then 'if press OK on blank entry
MsgBox "Incorrect Password", vbCritical, "Admin"
ElseIf pass = 0 Then 'if press CANCEL
Exit Sub
End If
End If
Popup:
If err.Number = 1004 Then
MsgBox "Incorrect Password", vbCritical, "Admin"
End If
End Sub
【问题讨论】:
标签: excel vba if-statement