Skip to content

Instantly share code, notes, and snippets.

@parano
Created February 20, 2012 07:18
Show Gist options
  • Save parano/1868242 to your computer and use it in GitHub Desktop.
Save parano/1868242 to your computer and use it in GitHub Desktop.
Excel表格密码保护的解除方法
表格受密码保护时,我们修改数据Excel弹出“您试图更改的单元格或图表受保护,因而是只读的。
若要修改受保护单元格或图表,请先使用‘撤消工作表保护’命令(在‘审阅’选项卡的‘更改’组中)来取消保护。
可能会提示输入密码。这时候我们可以用VBA宏代码破解法来破解表格保护密码:
第一步:打开该文件,先解除默认的“宏禁用”状态,方法是点击工具栏下的“选项”状态按钮,
打开“Microsoft Office安全选项”窗口,选择其中的“启用此内容”,“确定”
再切换到“视图”选项卡,点击“宏”→“录制宏”,出现“录制新宏”窗口,在“宏名”定义一个名称为:
PasswordBreaker,点击“确定”退出;
第二步:再点击“宏”→“查看宏”,选择“宏名”下的“PasswordBreaker”并点击“编辑”,
打开“Microsoft Visual Basic”编辑器,用如下内容替换右侧窗口中的所有代码:
Sub PasswordBreaker()
  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)
  ActiveWorkbook.Sheets(1).Select
  Range("a1").FormulaR1C1 = 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
第三步:再点击“宏”→“查看宏”,选择“宏名”下的“PasswordBreaker”并点击“执行”,密码就现形了
第四步:点击“撤消工作表保护”,然后输入密码即可解除锁定;
测试结果,密码破解可用,但是很晕的是破解的密码跟原来的密码有很大的差距,想不明白了,反正能用就好。
@abusinessman
Copy link

想请问一下,我已经运行1个小时了,还在运行中,是什么情况呢?

@wangwanjie
Copy link

mac 上 Office 2019亲测可用,谢谢

@reverof000
Copy link

把excel用txt保存,然后把txt复制到表格里不就好了。。

@ougithubou
Copy link

我试了一下,为什么密码都是11个“A”啊,密码也不是正确的。请问有人遇到过这个情况吗?

@wonpn
Copy link

wonpn commented Feb 11, 2020

亲测有效,什么原理看不懂

@flyingzl
Copy link

我试了一下,为什么密码都是11个“A”啊,密码也不是正确的。请问有人遇到过这个情况吗?

我这边的密码是 AAABBABAAAB,但实际上显示密码错误

@tcitry
Copy link

tcitry commented Jun 25, 2020

我试了一下,为什么密码都是11个“A”啊,密码也不是正确的。请问有人遇到过这个情况吗?

我这边的密码是 AAABBABAAAB,但实际上显示密码错误

@flyingzl 带着后面的冒号老哥,比如我的是AAABBABBBAB:

@SteelTimber
Copy link

謝謝,大神。

@qqzwc
Copy link

qqzwc commented Oct 14, 2020

Sub DeletePW()
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, AllowFiltering:=True
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, AllowFiltering:=True
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, AllowFiltering:=True
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, AllowFiltering:=True
ActiveSheet.Unprotect
End Sub

来源:https://my.oschina.net/u/4315754/blog/3459015

@youngyy18
Copy link

谢谢,大神

@hankhon4
Copy link

执行宏会导致excel无响应,试了一上午了,取消加载项,取消硬件加速,禁用信任中心里面的体验,各种办法都试了,都不行,win10+office2019。求助啊

@chang700
Copy link

以魔制魔,我献上一策,上传到 谷歌文档,密码就没了.然后再导出就行了

@arienjy
Copy link

arienjy commented Mar 23, 2022

哈哈哈,上传到腾讯文档也可以,然后再导出

@mmutj
Copy link

mmutj commented Aug 27, 2022

厉害阿 老哥 牛的

@skyshenma
Copy link

哈哈哈,上传到腾讯文档也可以,然后再导出

老哥,还是你这个nb。哈哈哈哈亲测有效

@legend053
Copy link

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)
    ActiveWorkbook.Sheets(1).Select
    Range("a1").FormulaR1C1 = 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

亲测,这个code在office 365上有用。

@elvisw
Copy link

elvisw commented Jul 10, 2023

MsgBox改成Debug.Print。运行结果会输出到立即窗口中,可以直接复制。MsgBox里的文字复制不了

@LiangSam
Copy link

哈哈哈,上传到腾讯文档也可以,然后再导出

天才,这招太牛了

@songyp0505
Copy link

牛逼,真成了

@Majorguo
Copy link

这个方法是不是只针对Excel有效,word好像不行。用不了

@oilfieldtools
Copy link

哈哈哈,上传到腾讯文档也可以,然后再导出

真的可以,比代码简单,代码一直无响应。
推荐使用,导入,导出即可。

@longliveh
Copy link

哈哈哈,上传到腾讯文档也可以,然后再导出

@oilfieldtools
Copy link

oilfieldtools commented Apr 3, 2025 via email

@BenjaminGao
Copy link

Office 365 有效

@pejaz
Copy link

pejaz commented Apr 23, 2025

还有一个办法。用 vim 打开 excel,然后把 xl - Worksheets 下面对应的 sheel ,搜索里面的 sheelProtection 标签删除就可以了

@oilfieldtools
Copy link

oilfieldtools commented Apr 24, 2025 via email

@cooljser
Copy link

哈哈哈,上传到腾讯文档也可以,然后再导出

直呼牛逼

@oilfieldtools
Copy link

oilfieldtools commented May 16, 2025 via email

@pejaz
Copy link

pejaz commented Jun 2, 2025

这个还是有一定门槛儿的。abcd-------- 原始邮件 --------发件人: pejaz @.>日期: 2025年4月23日周三 22:09收件人: pejaz @.>抄送: Comment @.>主 题: Re: @. commented on this gist.还有一个办法。用 vim 打开 excel,然后把 xl - Worksheets 下面对应的 sheel ,搜索里面的 sheelProtection 标签删除就可以了—Reply to this email directly, view it on GitHub or unsubscribe.You are receiving this email because you commented on the thread.Triage notifications on the go with GitHub Mobile for iOS or Android.

其他的方法对 wps 或者表格格式比较复杂的时候没用,要么不支持宏编辑要么下载下来格式会错乱

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment