取消工作簿保护

'清除工作表密码
Public Sub ClearPasswords()
 '说明
 Const HEADER As String = "All InternalPasswords User Message"
 Const VERSION As String = "Version 0.1"
 Const REPBACK As String = "Failure "

 Const ALLCLEAR As String = "The workbook should " & _

 "now be free of all password protection, so make sure you: SAVE IT NOW!"

 Const MSGNOPWORDS1 As String = "There were no passwords on " & _

 "sheets, or workbook structure or windows." & VERSION

 Const MSGNOPWORDS2 As String = "There was no protection to " & _

 "workbook structure or windows."

 Const MSGTAKETIME As String = "After pressing OK button this " & _

 "will take some time."

 Const MSGPWORDFOUND1 As String = "You had a Worksheet " & _

 "Structure or Windows Password set."

 Const MSGPWORDFOUND2 As String = "You had a Worksheet " & _

 "password set."

 Const MSGONLYONE As String = "Only structure / windows " & _

 "protected with the password that was just found."

 

 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

 Dim ps1 As String

 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 MSGNOPWORDS1, vbInformation, HEADER

    Exit Sub

 End If

 MsgBox MSGTAKETIME, vbInformation, HEADER

 If Not WinTag Then

    MsgBox MSGNOPWORDS2, vbInformation, HEADER

 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

                                                        ps1 = Chr(i) & Chr(j) & Chr(k) & _

                                                        Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _

                                                        Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)

                                                        .UnProtect ps1

                                                            If .ProtectStructure = False And .ProtectWindows = False Then

                                                                PWord1 = ps1

                                                                MsgBox Application.Substitute(MSGPWORDFOUND1, _

                                                                "$$", PWord1), vbInformation, HEADER

                                                                Exit Do         'Bypass all for...nexts

                                                            End If

                                                    End With

                                                Next n

                                            Next i6

                                        Next i5

                                    Next i4

                                Next i3

                            Next i2

                        Next i1

                    Next m

                Next l

            Next k

        Next j

    Next i

    Loop Until True

    On Error GoTo 0

 End If

 If WinTag And Not ShTag Then

    MsgBox MSGONLYONE, vbInformation, HEADER

    Exit Sub

 End If

 On Error Resume Next

 For Each w1 In Worksheets

    'Attempt clearance with PWord1

    w1.UnProtect PWord1

 Next w1

 On Error GoTo 0

 ShTag = False

 For Each w1 In Worksheets

    'Checks for all clear ShTag triggered to 1 if not.

    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)

                                                                MsgBox Application.Substitute(MSGPWORDFOUND2, _

                                                                "$$", PWord1), vbInformation, HEADER

                                                                'leverage finding Pword by trying on other sheets

                                                                    For Each w2 In Worksheets

                                                                        w2.UnProtect PWord1

                                                                    Next w2

                                                                Exit Do             'Bypass all for...nexts

                                                            End If

                                                        Next n

                                                    Next i6

                                                Next i5

                                            Next i4

                                        Next i3

                                    Next i2

                                Next i1

                            Next m

                        Next l

                    Next k

                Next j

            Next i

            Loop Until True

        On Error GoTo 0

        End If

    End With

 Next w1

 End If

 MsgBox ALLCLEAR & VERSION & REPBACK, vbInformation, HEADER

 End Sub

要解除工作表保护有个更简洁的方法

Sub UnProtect()
Sheet1.Protect AllowFiltering:=True
Sheet1.UnProtect
End Sub

转载于:https://my.oschina.net/tedzheng/blog/667787

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值