Excel 保護工作表 vba保護
- Category: 電腦相關
 - Last Updated: Friday, 17 January 2014 16:37
 - Published: Thursday, 26 December 2013 10:33
 - Written by sam
 
常常許多單位的交換資料
都會順手加上保護防止複製…
excel 2007
開文件 檢視 巨集 錄製巨集 出現視窗 隨便取個名字 離開
點開巨集 檢視巨集 編輯剛剛的巨集 替換掉所有內容
  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
離開
再點 巨集 檢視巨集 然後選執行
就成了
加碼一項 vba保護…
'移除VBA編碼保護
 Sub MoveProtect()
      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