有一次我女朋友让我帮忙解一个excel表格的保护密码,然后~用了宏
网上下载来的Excel经常会有工作表保护,也就是无法修改,妄图做任何修改的时候你就会看见这句话:
您试图更改的单元格或图表位于受保护的工作表中。若要进行更改,请取消工作表保护。您可能需要输入密码。
那么这篇文章可以简单的帮你解决这个问题...因为Excel中内置了Visual Basic,所以我们写个宏暴力破解密码就可以了。。。
1. 当然是先打开有保护密码的Excel文件
2. 新建一个宏(不同版本的office宏所在的位置不一样,一般都在"菜单—视图" 中)

然后我们点击"录制宏",名字随便写,然后再次点击,会发现录制宏的位置已经变成了“停止录制”,点击“停止录制”
3.在停止录制后我们点击“查看宏”,找到我们刚才新建的宏,比如我新建的名为“asd”,选中后点击"编辑"

4. 然后在弹出的框中我们可以看到我们新建的空宏"asd"

5. 把这个框内的所有内容全部删除,将下面的所有代码复制进去

6. 关闭Visual Basic,回到我们的Excel,当然这里不需要保存,直接右上角叉掉即可
7. 然后我们回到最初的位置,点击“查看宏”,就会发现刚才我们新建的空宏已经不见了,取而代之的是一个名为"Password_cracking"的宏

8. 选中这个宏,点击执行,就可以破解当前这份Excel中的工作保护密码了
当然在执行完这个宏之后,当前打开的Excel中的密码已经被清除,你可以选择直接保存这份Excel,这样的话你的Excel就不再有密码了,也可以选择记下破解出来的密码,然后关闭这个Excel重新打开一次,输入密码解除保护
1Public Sub Password_cracking() 2Const DBLSPACE As String = vbNewLine & vbNewLine 3Const AUTHORS As String = DBLSPACE & vbNewLine & _ 4" Author - GhostCN_Z " 5Const HEADER As String = "Password_cracking" 6Const VERSION As String = DBLSPACE & " Version 1.0" 7Const REPBACK As String = DBLSPACE & "" 8Const ZHENGLI As String = DBLSPACE & "" 9Const ALLCLEAR As String = DBLSPACE & "All password is clear" & DBLSPACE & "Please remember to save" 10Const MSGNOPWORDS1 As String = "No password!" 11Const MSGNOPWORDS2 As String = "No password!" 12Const MSGTAKETIME As String = "This will take some time , please wait for a while" & DBLSPACE & "Press next to start" 13Const MSGPWORDFOUND1 As String = "Password is : " & DBLSPACE & "$$" & DBLSPACE & _ 14"If the file worksheet has a different password, it will search for the next set of passwords and release" 15Const MSGPWORDFOUND2 As String = "Password is : " & DBLSPACE & "$$" & DBLSPACE & _ 16"If the file worksheet has a different password, it will search for the next set of passwords and release" 17Const MSGONLYONE As String = "" 18Dim w1 As Worksheet, w2 As Worksheet 19Dim i As Integer, j As Integer, k As Integer, l As Integer 20Dim m As Integer, n As Integer, i1 As Integer, i2 As Integer 21Dim i3 As Integer, i4 As Integer, i5 As Integer, i6 As Integer 22Dim PWord1 As String 23Dim ShTag As Boolean, WinTag As Boolean 24Application.ScreenUpdating = False 25With ActiveWorkbook 26WinTag = .ProtectStructure Or .ProtectWindows 27End With 28ShTag = False 29For Each w1 In Worksheets 30ShTag = ShTag Or w1.ProtectContents 31Next w1 32If Not ShTag And Not WinTag Then 33MsgBox MSGNOPWORDS1, vbInformation, HEADER 34Exit Sub 35End If 36MsgBox MSGTAKETIME, vbInformation, HEADER 37If Not WinTag Then 38Else 39On Error Resume Next 40Do 'dummy do loop 41For i = 65 To 66: For j = 65 To 66: For k = 65 To 66 42For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66 43For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66 44For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126 45With ActiveWorkbook 46.Unprotect Chr(i) & Chr(j) & Chr(k) & _ 47Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _ 48Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n) 49If .ProtectStructure = False And _ 50.ProtectWindows = False Then 51PWord1 = Chr(i) & Chr(j) & Chr(k) & Chr(l) & _ 52Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _ 53Chr(i4) & Chr(i5) & Chr(i6) & Chr(n) 54MsgBox Application.Substitute(MSGPWORDFOUND1, _ 55"$$", PWord1), vbInformation, HEADER 56Exit Do 'Bypass all for...nexts 57End If 58End With 59Next: Next: Next: Next: Next: Next 60Next: Next: Next: Next: Next: Next 61Loop Until True 62On Error GoTo 0 63End If 64If WinTag And Not ShTag Then 65MsgBox MSGONLYONE, vbInformation, HEADER 66Exit Sub 67End If 68On Error Resume Next 69For Each w1 In Worksheets 70'Attempt clearance with PWord1 71w1.Unprotect PWord1 72Next w1 73On Error GoTo 0 74ShTag = False 75For Each w1 In Worksheets 76'Checks for all clear ShTag triggered to 1 if not. 77ShTag = ShTag Or w1.ProtectContents 78Next w1 79If ShTag Then 80For Each w1 In Worksheets 81With w1 82If .ProtectContents Then 83On Error Resume Next 84Do 'Dummy do loop 85For i = 65 To 66: For j = 65 To 66: For k = 65 To 66 86For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66 87For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66 88For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126 89.Unprotect Chr(i) & Chr(j) & Chr(k) & _ 90Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _ 91Chr(i4) & Chr(i5) & Chr(i6) & Chr(n) 92If Not .ProtectContents Then 93PWord1 = Chr(i) & Chr(j) & Chr(k) & Chr(l) & _ 94Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _ 95Chr(i4) & Chr(i5) & Chr(i6) & Chr(n) 96MsgBox Application.Substitute(MSGPWORDFOUND2, _ 97"$$", PWord1), vbInformation, HEADER 98'leverage finding Pword by trying on other sheets 99For Each w2 In Worksheets 100w2.Unprotect PWord1 101Next w2 102Exit Do 'Bypass all for...nexts 103End If 104Next: Next: Next: Next: Next: Next 105Next: Next: Next: Next: Next: Next 106Loop Until True 107On Error GoTo 0 108End If 109End With 110Next w1 111End If 112MsgBox ALLCLEAR & AUTHORS & VERSION & REPBACK & ZHENGLI, vbInformation, HEADER 113End Sub