Снимите защиту всех листов без пароля - PullRequest
0 голосов
/ 30 сентября 2019

Я пытался заставить приведенный ниже код работать на всех листах в моей книге, а не только на активном листе, но вместо этого он застревает в цикле после третьего листа.

Я думаю, может быть, что происходитв том, что в этой книге есть скрытые рабочие листы, которые делают ее неудачной. Если бы я мог просто снять защиту с видимых рабочих таблиц, это могло бы решить эту проблему? Хотя я тоже это попробовал, но я не думаю, что моя логика верна, и я не думаю, что стоит поделиться.

Любая помощь здесь будет принята с благодарностью

Мои правки:

Sub UnprotectAllSheets()
         Dim WS_Count As Integer
         Dim WsNum As Integer
         WS_Count = ActiveWorkbook.Worksheets.Count
         For WsNum = 1 To WS_Count
            Dim I As Integer, j As Integer, k As Integer
            Dim l As Integer, m As Integer, n As Integer
            Dim i1 As Integer, i2 As Integer, i3 As Integer
            Dim i4 As Integer, i5 As Integer, i6 As Integer
            On Error Resume Next
            For I = 65 To 66: For j = 65 To 66: For k = 65 To 66
            For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66
            For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
            For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126
            Worksheets(WsNum).Unprotect Chr(I) & Chr(j) & Chr(k) & _
                Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
                Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
            If Worksheets(WsNum).ProtectContents = False Then
                GoTo NextSht
            End If
            Next: Next: Next: Next: Next: Next
            Next: Next: Next: Next: Next: Next
NextSht:
         Next WsNum

      End Sub

Оригинальный код:

Sub PasswordBreaker()
'Breaks worksheet password protection.

    Dim i As Integer, j As Integer, k As Integer
    Dim l As Integer, m As Integer, n As Integer
    Dim i1 As Integer, i2 As Integer, i3 As Integer
    Dim i4 As Integer, i5 As Integer, i6 As Integer
    On Error Resume Next
    For i = 65 To 66: For j = 65 To 66: For k = 65 To 66
    For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66
    For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
    For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126
    ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & _
        Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
        Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
    If ActiveSheet.ProtectContents = False Then
        MsgBox "One usable password is " & Chr(i) & Chr(j) & _
            Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _
            Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
         Exit Sub
    End If
    Next: Next: Next: Next: Next: Next
    Next: Next: Next: Next: Next: Next
End Sub

1 Ответ

0 голосов
/ 30 сентября 2019

На самом деле это была видимая проблема с рабочим листом, о которой я говорил ранее, которая могла бы ее исправить. Я получил его с помощью Активировать листы, но не уверен, почему простое выполнение Worksheets(wsnum).Unprotect не работает ... увы, вот код:

Sub passwordbreaker()
    Dim WS_Count As Integer
    Dim wsnum As Integer
    WS_Count = ActiveWorkbook.Worksheets.Count
    For wsnum = 1 To WS_Count
        If Worksheets(wsnum).Visible = True Then
            ActiveWorkbook.Worksheets(wsnum).Activate
            Dim I As Integer, j As Integer, k As Integer
            Dim l As Integer, m As Integer, n As Integer
            Dim i1 As Integer, i2 As Integer, i3 As Integer
            Dim i4 As Integer, i5 As Integer, i6 As Integer
            On Error Resume Next
            For I = 65 To 66: For j = 65 To 66: For k = 65 To 66
            For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66
            For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
            For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126
            ActiveSheet.Unprotect Chr(I) & Chr(j) & Chr(k) & _
                Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
                Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
            If ActiveSheet.ProtectContents = False Then
                 GoTo nextsht
            End If
            Next: Next: Next: Next: Next: Next
            Next: Next: Next: Next: Next: Next
        End If
nextsht:
    Next wsnum
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...