Hiển thị các bài đăng có nhãn Excel. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn Excel. Hiển thị tất cả bài đăng

Thứ Tư, 28 tháng 12, 2022

How to Unprotect my Excel VBA Project without the password - Gỡ bỏ mật khẩu trong VBA Excel

 1. Đổi tên phần mở rộng tệp của bảng tính của bạn từ *.xlsm thành *.zip.

2. Sử dụng bất kỳ phần mềm nén tệp nào bạn chọn, mở tệp "zip" của bạn. 

3. Xác định vị trí và nhấp đúp chuột vào thư mục “xl”. Trong thư mục này, bạn sẽ tìm thấy tệp vbaProject.bin (hoặc vbaProject.bas). Giải nén tệp này vào một vị trí tạm thời trên máy tính của bạn (tức là trên Màn hình của bạn).
 

LƯU Ý: 
KHÔNG đóng Phần mềm nén tệp của bạn (tức là 7-Zip) sau bước này vì bạn sẽ vẫn cần sử dụng nó trong bước 9 tiếp theo.

 

4. Tải xuống và cài đặt Trình chỉnh sửa HEX vào máy tính của bạn. Có nhiều phiên bản miễn phí dành cho bạn – cá nhân chúng tôi thích sử dụng Freeware Hex Editor XVI32 .
5. Mở tệp vbaProject.bin (hoặc vbaProject.bas) trong XVI32
6. Tìm kiếm văn bản “DPB=” (không có dấu ngoặc kép).

7. Sửa đổi “DPB=” thành “DPx=” (không có dấu ngoặc kép)

8. Lưu tệp và đóng Trình chỉnh sửa HEX

9. Chèn lại tệp vbaProject.bin (hoặc vbaProject.bas) đã lưu và sửa đổi của bạn vào tệp zip của bạn. Sau bước 3, bạn vẫn phải mở tệp của mình trong Phần mềm nén tệp (7-Zip) và bạn vẫn phải ở trong thư mục “xl” – sau đó từ màn hình của bạn (hoặc thư mục tạm thời nơi bạn đã lưu tệp vbaProject.bin đã sửa đổi ), nhấp chuột trái (và giữ) rồi “kéo và thả” tệp này vào thư mục 7-Zip xl, ghi đè lên tệp hiện có ở vị trí này.

10. Đổi tên tệp *.zip của bạn thành *.xlsm.

11. Mở bảng tính đã sửa đổi của bạn bằng Excel. Khi bạn làm điều này lần đầu tiên, bạn sẽ được nhắc với khá nhiều Thông báo Lỗi. Điều này là hoàn toàn OK. Tiếp tục nhấn Yes/OK cho đến khi chúng dừng lại.

12. Hãy thử mở Dự án VBA của bạn bên trong Visual Basic Editor (sử dụng phím tắt Alt+F11) và nhấp vào OK nếu bạn nhận được bất kỳ thông báo lỗi nào.

13. Trong cửa sổ Project bên trái, nhấp chuột phải vào tên VBAproject rồi chọn VBAProject Properties…

14. Nhấp vào tab Bảo vệ và bỏ chọn hộp kiểm Khóa dự án để xem và xóa mọi mật khẩu hiện có nếu chúng tồn tại trong hộp Mật khẩu.

15. Lưu bảng tính của bạn thành một sổ làm việc khác – “tên gốc – unprotected.xls” (hoặc bất kỳ thứ gì bạn thích. Chỉ cần Lưu dưới dạng một bảng tính khác).

16. Đóng bảng tính của bạn và mở lại phiên bản không được bảo vệ của bảng tính và mã VBA của bạn bây giờ sẽ hiển thị trong Visual Basic Editor.

Thứ Tư, 5 tháng 6, 2019

Unprotected VBA Project - Excel 2016

1. Mở file excel chứa password
2. Mở thêm một file excel mới. Thêm một module 1
Option Explicit

Private Const PAGE_EXECUTE_READWRITE = &H40

Private Declare PtrSafe Sub MoveMemory Lib "kernel32" Alias "RtlMoveMemory" _
(Destination As LongPtr, Source As LongPtr, ByVal Length As LongPtr)

Private Declare PtrSafe Function VirtualProtect Lib "kernel32" (lpAddress As LongPtr, _
ByVal dwSize As LongPtr, ByVal flNewProtect As LongPtr, lpflOldProtect As LongPtr) As LongPtr

Private Declare PtrSafe Function GetModuleHandleA Lib "kernel32" (ByVal lpModuleName As String) As LongPtr

Private Declare PtrSafe Function GetProcAddress Lib "kernel32" (ByVal hModule As LongPtr, _
ByVal lpProcName As String) As LongPtr

Private Declare PtrSafe Function DialogBoxParam Lib "user32" Alias "DialogBoxParamA" (ByVal hInstance As LongPtr, _
ByVal pTemplateName As LongPtr, ByVal hWndParent As LongPtr, _
ByVal lpDialogFunc As LongPtr, ByVal dwInitParam As LongPtr) As Integer

Dim HookBytes(0 To 11) As Byte
Dim OriginBytes(0 To 11) As Byte
Dim pFunc As LongPtr
Dim Flag As Boolean

Private Function GetPtr(ByVal Value As LongPtr) As LongPtr
    GetPtr = Value
End Function

Public Sub RecoverBytes()
    If Flag Then MoveMemory ByVal pFunc, ByVal VarPtr(OriginBytes(0)), 12
End Sub

Public Function Hook() As Boolean
    Dim TmpBytes(0 To 11) As Byte
    Dim p As LongPtr, osi As Byte
    Dim OriginProtect As LongPtr

    Hook = False

    #If Win64 Then
        osi = 1
    #Else
        osi = 0
    #End If

    pFunc = GetProcAddress(GetModuleHandleA("user32.dll"), "DialogBoxParamA")

    If VirtualProtect(ByVal pFunc, 12, PAGE_EXECUTE_READWRITE, OriginProtect) <> 0 Then

        MoveMemory ByVal VarPtr(TmpBytes(0)), ByVal pFunc, osi+1
        If TmpBytes(osi) <> &HB8 Then

            MoveMemory ByVal VarPtr(OriginBytes(0)), ByVal pFunc, 12

            p = GetPtr(AddressOf MyDialogBoxParam)

            If osi Then HookBytes(0) = &H48
            HookBytes(osi) = &HB8
            osi = osi + 1
            MoveMemory ByVal VarPtr(HookBytes(osi)), ByVal VarPtr(p), 4 * osi
            HookBytes(osi + 4 * osi) = &HFF
            HookBytes(osi + 4 * osi + 1) = &HE0

            MoveMemory ByVal pFunc, ByVal VarPtr(HookBytes(0)), 12
            Flag = True
            Hook = True
        End If
    End If
End Function

Private Function MyDialogBoxParam(ByVal hInstance As LongPtr, _
ByVal pTemplateName As LongPtr, ByVal hWndParent As LongPtr, _
ByVal lpDialogFunc As LongPtr, ByVal dwInitParam As LongPtr) As Integer

    If pTemplateName = 4070 Then
        MyDialogBoxParam = 1
    Else
        RecoverBytes
        MyDialogBoxParam = DialogBoxParam(hInstance, pTemplateName, _
                   hWndParent, lpDialogFunc, dwInitParam)
        Hook
    End If
End Function
3. Paste code bên dưới vào module 2 và Run nó
Sub unprotected()
    If Hook Then
        MsgBox "VBA Project is unprotected!", vbInformation, "*****"
    End If 
End Sub