In one of my previous articles, I discussed how to unprotect worksheets in Excel, and many people asked me how they can do the same when they have an Excel file with a locked VBA project.
While a VBA project is slightly more complex to unlock without the password, it can be done.
In this article, I will show you two simple methods to remove the password from a locked VBA project in Excel. First I’ll show you a VBA code to do this, and then I’ll show you how to do this using a free hex editor tool.
Click here to download the example file and follow along
This Tutorial Covers:
ToggleBetter safe than sorry – Always create a backup copy of your file before trying any of the following methods.
Remove VBA Password with VBA Code (64 Bit Excel)
Disclaimer: I did not create this VBA code, and the credit for it goes to a Vietnamese developer, Siwtom (which was further refined by another user). I copied this code from the following link – https://stackoverflow.com/questions/1026483/is-there-a-way-to-crack-the-password-on-an-excel-vba-project/31005696#31005696
Below is the VBA code you can use in 64-bit Excel to unlock VBA projects and remove passwords:
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
Sub UnprotectVBA()
If Hook Then
MsgBox "VBA Project is unprotected!", vbInformation, "VBA Unlocked"
End If
End Sub
If using 32-bit Excel, you can try using the code here. Since I have 64-bit Excel, I have not tested the code for 32-bit Excel.
Here is how you can check what version of Excel you have
Below are the steps to use this VB macro code to unlock VBA projects:
- Keep the Excel file open that has the VBA project that you want to unlock
- Open a new Excel file
- Open the VB editor in this new Excel file (You can use the keyboard shortcut ALT + F11, or you can go to the developer tab and then click on the Visual Basic icon)
- In the VB editor, insert a new module (this should be for this new Excel file we have opened that does not have the locked VBA project)
- Copy and paste the above VBA code into this newly inserted module.
- Place the cursor anywhere in the UnprotectVBA subroutine.
- Run the macro code. You can do this by pressing the F5 key on your keyboard or by clicking on the run macro icon in the VB editor toolbar.
As soon as you run the macro, you should see a message box shown below, that says – VBA Project is unprotected!
Close the message box and go back into the VB editor, and the VB project should now be unlocked.
I tried this on my system with a couple of different locked VBA project Excel files, and it worked. However, some users have reported that it didn’t work for them. So give this a try, and if it doesn’t work, you can use the next method, which uses a Hex Editor to unprotect a VBA project.
Remove VBA Password HEX Editor
Another free and easy way to remove the VBA password from your Excel file is using a HEX editor.
A HEX Editor is a free lightweight third-party tool that allows you to edit the binary data that makes up a VBA project in Excel.
In this method, we open the VBA project within the HEX editor and replace the password that we do not know with the password that we do know so that we can unlock the project with that known password.
You can download the hex editor using the following link (takes you to CNET website)
Below are the steps to replace the password using the HEX Editor:
- Go to the folder where you have the Excel file with the VBA project that you want to unlock.
- Change the file extension from .XLSM to .ZIP. This will convert your Excel file into a zip folder.
- Open the zip folder, locate the XL folder, and double-click on it to open it.
- Locate the vbaProject.bin file, copy it, and paste the copy outside of the zip folder (so we can make changes to this file).
- Open the HEX editor
- Open the vbaProject.bin file in the HEX editor. You’ll see the binary information of the file being displayed in the HEX editor.
- Hold the Control key and press the F key. This will open the Find dialog box.
- Search for the term DPB (enter DPB in the Find field and click OK). You notice that there is a binary code after the DPB within quotes (highlighted in red below).
- Replace the code in the double quotes with 0A08A6B1B6CEB6CE4932B7CE4B63A66D37B84BA3D4BAD58A6B495254585A5D3D675777675D
If the length of the code that is already there being displayed in the Hex editor is different than the one that I have provided above, add a couple of zeros to the above code to make the length similar.
- Save the file and close the hex editor.
- Copy the vbaProject.bin file in which we have made the changes, Then go back into the xl folder within the zip folder, and replace the original vbaProject.bin file with the one you copied.
- Change the extension of the folder from .zip to .xlsm
- Open the Excel file and then open the VB Editor.
- Enter 123 as the password to unlock the VB Project.
You can keep the VB project locked and use 123 as the password, or you can first unlock the VB project and then remove the password altogether.
So, these are two simple methods you can use to remove the password from a VBA project quickly. Try using the VBA code first, and if for some reason that doesn’t work, then you can try the hex editor method.
I hope you found this article helpful. If you know of any other method that can be used to unprotect locked VB projects, do share it with us all in the comment section.
Other Excel articles you may also like: