Перейти к обработчику ошибок при снятии защиты листа - PullRequest
0 голосов
/ 13 января 2020

Я защищаю и удаляю свои листы с помощью кода VBA, найденного в Интернете.

Защита:

    Dim pwd1 As String, pwd2 As String
    pwd1 = InputBox("Please Enter the password")
    If pwd1 = "" Then Exit Sub
    pwd2 = InputBox("Please re-enter the password")

    If pwd2 = "" Then Exit Sub

    'Check if both the passwords are identical
    If InStr(1, pwd2, pwd1, 0) = 0 Or _
    InStr(1, pwd1, pwd2, 0) = 0 Then
        MsgBox "Password not matching. Please retry."
        Exit Sub
    End If

    For Each ws In Worksheets
        ws.Protect Password:=pwd1
    Next

    MsgBox "All worksheets Protected."

Exit Sub

Снятие защиты:

    On Error GoTo ErrorOccured

    Dim pwd1 As String
    pwd1 = InputBox("Please Enter the password")
    If pwd1 = "" Then Exit Sub
    For Each ws In Worksheets
        ws.Unprotect Password:=pwd1
    Next
    MsgBox "All sheets UnProtected."

    Exit Sub

    ErrorOccured:

    MsgBox "Sheets could not be UnProtected - Password Incorrect"
Exit Sub

Защита работает хорошо. Снятие защиты с правильным вводом пароля было успешным, но макрос все еще перескочил к обработчику ошибок ErrorOccured и отображает сообщение

Листы не могут быть незащищены - неверный пароль

все еще появляется.

В чем была проблема? Как я могу это исправить?

1 Ответ

0 голосов
/ 13 января 2020

я использую их годами:

Sub Schutz_ALLE_mit_PW_Abfrage()

nochmal:
pw1 = InputBox("Passwort eingeben")
pw2 = InputBox("Passwort nochmal eingeben")

If pw1 = pw2 Then GoTo los
If MsgBox("Passwortwiederholung war falsch", vbRetryCancel) = vbRetry Then GoTo nochmal
Exit Sub

los:
For Each blatt _
In ActiveWorkbook.Sheets
On Error Resume Next
On Error GoTo weiter

If blatt.ProtectContents Then GoTo weiter
    blatt.Protect userinterfaceonly:=True, Password:="mb_neu", DrawingObjects:=True, Contents:=True, Scenarios:=True _
        , AllowFormattingCells:=True, AllowFormattingColumns:=True, _
        AllowFormattingRows:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
        blatt.EnableSelection = xlNoRestrictions
        blatt.EnableAutoFilter = True
        blatt.EnableOutlining = True
weiter:
Next
End Sub

Sub Schutz_ALLE_weg()
pw1 = InputBox("Passwort eingeben")
For Each blatt _
In ActiveWorkbook.Sheets
blatt.Activate
ActiveSheet.Unprotect Password:=pw1
Next
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...