• Excel解除'工作表保护密码',并复原密码设定


    前言

    适用环境

      1. Office 2003(也就是老版的.xls文件)
      2. 用到宏操作
      3. 可以解除【审阅->保护工作表】的密码保护,其他的密码保护不能处理。

    解决

    具体步骤

      1. 打开需解除保护密码的Excel文件(.xls);
      2. 从菜单栏里找到并打开【录制宏】;
        
      3. 直接点击【停止录制】(这样得到一个空宏);
      4. 点击【宏】,找到刚刚录制的宏,点击编辑;
      5. 删除窗口中的所有代码,替换为下面的内容;
      6. 如果菜单没有上述描述的按钮,可以在【文件->选项->自定义功能区】找
      7. Ctrl+S保存关闭编辑窗口;
      8. 点击【宏】,找到刚刚编辑的宏【AllInternalPasswords】,点击执行,按照提示信息操作;
      9. 等待一会弹窗会有下面的提示,这样就是成功了!(记得保存弹窗中的密码,后面要用)
      10. 这时密码已经被清除掉了,你就可以随意修改文件内容了,如果想恢复原来的密码状态,重新点击【审阅->保护工作表】把弹窗中找到的密码原封不动的拷贝进去,并保存,这样原来的密码也可以用,这个密码也可以用

    直接选中窗口按Ctrl+C就能拷贝窗口的全部文字,可以先粘贴到文本编辑器里再取获得的密码

      

    代码

    Option Explicit
    
    Public Sub AllInternalPasswords()
    ' Breaks worksheet and workbook structure passwords. Bob McCormick
    ' probably originator of base code algorithm modified for coverage
    ' of workbook structure / windows passwords and for multiple passwords
    '
    ' Norman Harker and JE McGimpsey 27-Dec-2002 (Version 1.1)
    ' Modified 2003-Apr-04 by JEM: All msgs to constants, and
    ' eliminate one Exit Sub (Version 1.1.1)
    ' Reveals hashed passwords NOT original passwords
    Const DBLSPACE As String = vbNewLine & vbNewLine
    Const AUTHORS As String = DBLSPACE & vbNewLine & _
    "改编自Bob McCormick的代码。" 
    Const HEADER As String = "重置密码"
    Const VERSION As String = DBLSPACE & "Version 1.1.1 2003-Apr-04"
    Const REPBACK As String = DBLSPACE & "感谢使用!" 
    Const ALLCLEAR As String = DBLSPACE & "工作簿现在应该没有任何密码保护,因此请确保:" & _
    DBLSPACE & "立即保存!" & DBLSPACE & "并且" & _
    DBLSPACE & "备份!, 备份!!, 备份!!!"
    Const MSGNOPWORDS1 As String = "工作表、工作簿结构或窗口上没有密码。" & AUTHORS & VERSION
    Const MSGNOPWORDS2 As String = "对工作簿结构或窗口没有保护" & _
    "。" & DBLSPACE & _
    "继续取消工作表保护。" & AUTHORS & VERSION
    Const MSGTAKETIME As String = "按下OK按钮后,会需要花费一些时间" & _
    "。" & DBLSPACE & "这个时间的长短取决于密码的难度和电脑的性能" & _
    "。" & DBLSPACE & _
    "请耐心等待,或者先去喝杯茶!" & AUTHORS & VERSION
    Const MSGPWORDFOUND1 As String = "您设置了工作表结构或Windows密码" & _
    "。" & DBLSPACE & _
    "找到的密码是:" & DBLSPACE & "$$" & DBLSPACE & _
    "请记下来,以备将来由设置此密码" & _
    "的同一个人在其他工作簿中使用" & DBLSPACE & _
    "现在检查并清除其他密码" & AUTHORS & VERSION
    Const MSGPWORDFOUND2 As String = "您设置了工作表密码" & _
    "。" & DBLSPACE & "找到的密码是:" & _
    DBLSPACE & "$$" & DBLSPACE & "请记下来,以备将来由设置此密码" & _
    "的同一个人在其他工作簿中使用" & _
    "。" & DBLSPACE & "现在检查并清除其他密码" & _
    "。" & AUTHORS & VERSION
    Const MSGONLYONE As String = "只有使用刚找到的密码保护的结构/窗口。" & _
    ALLCLEAR & AUTHORS & VERSION & REPBACK
    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 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
    .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)
    MsgBox Application.Substitute(MSGPWORDFOUND1, _
    "$$", PWord1), vbInformation, HEADER
    Exit Do 'Bypass all for...nexts
    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
    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: 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 ALLCLEAR & AUTHORS & VERSION & REPBACK, vbInformation, HEADER
    End Sub
    
  • 相关阅读:
    项目工程化之git提交规范以及 CHANGELOG生成
    移动端 弹窗-内容可滚动,背景不动
    项目readme文件目录生成工具 treer
    css animation动画
    【网络】从套接字到Web服务器
    【网络】图解HTTP-1
    【MySQL】搞懂ACID原则和事务隔离级别
    【MySQL】备份与恢复
    【MySQL】索引
    【Redis】主从复制原理
  • 原文地址:https://www.cnblogs.com/MrZhou5/p/12134268.html
Copyright © 2020-2023  润新知