移除EXCEL中单元格保护的密码

首先接触EXCEL宏安全性,建议先设置为【低】,处理后再重新设置回去。然后新建1个宏,复制下面代码后,执行。

Private Function AllInternalPasswords()
    Dim w1     As Worksheet, w2       As Worksheet
    Dim i     As Integer, j       As Integer, k       As Integer, l       As Integer
    Dim m     As Integer, n       As Integer, i1       As Integer, i2       As Integer
    Dim i3     As Integer, i4       As Integer, i5       As Integer, i6       As Integer
    Dim PWord1     As String
    Dim ShTag     As Boolean, WinTag       As Boolean
               
    Application.ScreenUpdating = False
    With ActiveWorkbook
          WinTag = .ProtectStructure Or .ProtectWindows
    End With
   
    ShTag = False
    For Each w1 In Worksheets
            ShTag = ShTag Or w1.ProtectContents
    Next w1
   
    If Not ShTag And Not WinTag Then
          MsgBox "当前工作表没有单元格设置保护…… ", 32, "提示 "
          Exit Function
    End If
               
    If Not WinTag Then
          ‘MsgBox   "只有保护工作表﹐未设置保护密码… ",   32,   "提示 "
    Else
          On Error Resume Next
          Do             ‘dummy   do   loop
                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
                With ActiveWorkbook
                          .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 .ProtectStructure = False And _
                                .ProtectWindows = False Then
                                  PWord1 = 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 Do
                          End If
                End With
               
                Next:   Next:   Next:   Next:   Next:   Next
                Next:   Next:   Next:   Next:   Next:   Next
            Loop Until True
           
            On Error GoTo 0
    End If
   
    If WinTag And Not ShTag Then Exit Function
          On Error Resume Next
          For Each w1 In Worksheets
                  w1.Unprotect PWord1
          Next w1
               
          On Error GoTo 0
          ShTag = False
          For Each w1 In Worksheets
                  ShTag = ShTag Or w1.ProtectContents
          Next w1
               
          If ShTag Then
                For Each w1 In Worksheets
                        With w1
                            If .ProtectContents Then
                                  On Error Resume Next
                                  Do             ‘Dummy   do   loop
                                        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
                                        .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 Not .ProtectContents Then
                                            PWord1 = Chr(i) & Chr(j) & Chr(k) & Chr(l) & _
                                                Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
                                                Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
                                           
                                            For Each w2 In Worksheets
                                                w2.Unprotect PWord1
                                            Next w2
                                            Exit Do       ‘Bypass   all   for…nexts
                                        End If
                                        Next:   Next:   Next:   Next:   Next:   Next
                                        Next:   Next:   Next:   Next:   Next:   Next
                                    Loop Until True
                                    On Error GoTo 0
                                End If
                            End With
                        Next w1
                End If
                MsgBox "工作表保护已被移除…… ", 32, "提示 "
End Function

发布者

PDBeta

QQ:7979779 邮箱:pdbeta@qq.com 网站:WWW.PDBeta.COM PDBeta的微博:www.weibo.com/pdbeta

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注