【问题标题】:Unprotect workbook without password取消保护没有密码的工作簿
【发布时间】:2020-06-30 20:34:36
【问题描述】:

我有一个流行的 VBA 代码来取消保护工作表,但我仍然遇到工作簿受到保护的问题。

Sub PasswordBreaker()
'Breaks worksheet password protection.

    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)
         Exit Sub
    End If
    Next: Next: Next: Next: Next: Next
    Next: Next: Next: Next: Next: Next
End Sub

【问题讨论】:

  • 请添加VBA代码。
  • 较新的保护基于不易删除的加密。

标签: excel vba


【解决方案1】:

尝试使用以下代码取消保护工作簿。它在 excel 2010 中对我来说很好用,但我不确定它是否会在 2013 年有效。

Sub PasswordBreaker()
    'Breaks worksheet password protection.
    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
    ThisWorkbook.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 ThisWorkbook.ProtectStructure = 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)
         Exit Sub
    End If
    Next: Next: Next: Next: Next: Next
    Next: Next: Next: Next: Next: Next
End Sub

【讨论】:

  • 如果有人对两者之间的变化感兴趣gist.github.com/tobya/e144806a4e3974ec4852/revisions
  • 这在 2016 年仍然有效吗?我有一个 Excel 文件,其中包含一个提示输入密码的工作表,但是您单击取消,一切都很好...
  • 当它需要访问此文件的 VBA - 因为它使用 ThisWorkbook 时,这应该如何删除工作簿(文件)保护?
  • @RyszardJędraszyk VBA 保护与工作簿保护是分开的。 VBA 保护是一个单独的问题,而不是这个问题的意义。
  • 它在我的 Excel 2016 上不起作用,所以我做了一个解决方法。将文件保存为.xls 并使用代码。然后保存回.xlsx。请注意,某些功能会丢失,如果行数超过 65,536,则超出 .xls 文件支持的最大行数将丢失!
【解决方案2】:

不再适用于具有 Excel 2013 或更高版本的电子表格受保护 - 他们改进了 pw 哈希。所以现在需要解压 .xlsx 并破解内部结构。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 2019-10-27
    相关资源
    最近更新 更多