林中两路分,一路人迹稀。我独选此路,境遇乃相异。

0%

Excel宏命令去除加密


在工作中,平常用到的Excel宏命令中,通常是被人加密处理过的,无法进行修改,下面给出方法去除加密信息。

操作步骤

  1. 新建一个Excel文件,Alt+F11调出VBA编辑器,插入–模块,拷贝下面代码后执行。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73

    Sub RemovePassword()
    Dim FileName As String
    FileName = Application.GetOpenFilename("Excel文件(*.xls & *.xla),*.xls;*.xla", , "VBA破解")
    If FileName = CStr(False) Then
    Exit Sub
    Else
    VBAPassword FileName, False
    End If
    End Sub

    '设置VBA编码保护
    Sub SetProtect()
    Dim FileName As String
    FileName = Application.GetOpenFilename("Excel文件(*.xls & *.xla),*.xls;*.xla", , "VBA破解")
    If FileName = CStr(False) Then
    Exit Sub
    Else
    VBAPassword FileName, True
    End If
    End Sub

    Private Function VBAPassword(FileName As String, Optional Protect As Boolean = False)
    If Dir(FileName) = "" Then
    Exit Function
    Else
    FileCopy FileName, FileName & ".bak"
    End If

    Dim GetData As String * 5
    Open FileName For Binary As #1
    Dim CMGs As Long
    Dim DPBo As Long

    For i = 1 To LOF(1)
    Get #1, i, GetData
    If GetData = "CMG=""" Then CMGs = i
    If GetData = "[Host" Then DPBo = i - 2: Exit For
    Next

    If CMGs = 0 Then
    MsgBox "请先对VBA编码设置一个保护密码...", 32, "提示"
    Exit Function
    End If

    If Protect = False Then
    Dim St As String * 2
    Dim s20 As String * 1

    '取得一个0D0A十六进制字串
    Get #1, CMGs - 2, St

    '取得一个20十六制字串
    Get #1, DPBo + 16, s20

    '替换加密部份机码
    For i = CMGs To DPBo Step 2
    Put #1, i, St
    Next

    '加入不配对符号
    If (DPBo - CMGs) Mod 2 <> 0 Then
    Put #1, DPBo + 1, s20
    End If
    MsgBox "文件解密成功......", 32, "提示"
    Else
    Dim MMs As String * 5
    MMs = "DPB="""
    Put #1, CMGs, MMs
    MsgBox "对文件特殊加密成功......", 32, "提示"
    End If
    Close #1
    End Function
-------------本文结束 感谢您的阅读-------------
觉得好,点这里 ^_^