How to un-protect Microsoft Excel worksheet without password

Today one of my co-workers in Finance department asked me to take a look at an Excel worksheet. He needed to add something in but all modification options like Insert, Delete were grayed out. He mentioned he was not the original guy did this worksheet and the guy who did this worksheet had left.

After I got his file and navigated around, I found that all worksheets for this file have been password protected. Since the Finance Dept. could not get the password from the original creator, he has to ask me as an “IT geek” for the help.

As you can tell, I have no idea about Excel protection at that moment. But anyway, I used Google again. Surprisely, the first search result resolved this problem.

According to the website mcgimpsey.com, the only thing you need to do is to run a VBA Macro which can reserve out the “password”. The Macro code is attached as the following.

Of course, you can download the workbook allinternalpasswords.xls if you don’t want to cut and paste the macro below. The workbook is hidden, and has an attached toolbar with a button to start the macro. Activate the workbook you want to unlock and click the button. The code is unlocked so you may examine and modify it as needed.

Remember: if you are going to open the allinternalpasswords.xls in your Excel application, you will have to downgrade your Security level first.

 Public Sub AllInternalPasswords()

        ' Breaks worksheet and workbook structure passwords. Bob McCormick

        '  probably originator of base code algorithm modified for coverage

        '  of workbook structure / windows passwords and for multiple passwords

        '

        ' Norman Harker and JE McGimpsey 27-Dec-2002 (Version 1.1)

        ' Modified 2003-Apr-04 by JEM: All msgs to constants, and

        '   eliminate one Exit Sub (Version 1.1.1)

        ' Reveals hashed passwords NOT original passwords

        Const DBLSPACE As String = vbNewLine & vbNewLine

        Const AUTHORS As String = DBLSPACE & vbNewLine & _

                "Adapted from Bob McCormick base code by" & _

                "Norman Harker and JE McGimpsey"

        Const HEADER As String = "AllInternalPasswords User Message"

        Const VERSION As String = DBLSPACE & "Version 1.1.1 2003-Apr-04"

        Const REPBACK As String = DBLSPACE & "Please report failure " & _

                "to the microsoft.public.excel.programming newsgroup."

        Const ALLCLEAR As String = DBLSPACE & "The workbook should " & _

                "now be free of all password protection, so make sure you:" & _

                DBLSPACE & "SAVE IT NOW!" & DBLSPACE & "and also" & _

                DBLSPACE & "BACKUP!, BACKUP!!, BACKUP!!!" & _

                DBLSPACE & "Also, remember that the password was " & _

                "put there for a reason. Don't stuff up crucial formulas " & _

                "or data." & DBLSPACE & "Access and use of some data " & _

                "may be an offense. If in doubt, don't."

        Const MSGNOPWORDS1 As String = "There were no passwords on " & _

                "sheets, or workbook structure or windows." & AUTHORS & VERSION

        Const MSGNOPWORDS2 As String = "There was no protection to " & _

                "workbook structure or windows." & DBLSPACE & _

                "Proceeding to unprotect sheets." & AUTHORS & VERSION

        Const MSGTAKETIME As String = "After pressing OK button this " & _

                "will take some time." & DBLSPACE & "Amount of time " & _

                "depends on how many different passwords, the " & _

                "passwords, and your computer's specification." & DBLSPACE & _

                "Just be patient! Make me a coffee!" & AUTHORS & VERSION

        Const MSGPWORDFOUND1 As String = "You had a Worksheet " & _

                "Structure or Windows Password set." & DBLSPACE & _

                "The password found was: " & DBLSPACE & "$$" & DBLSPACE & _

                "Note it down for potential future use in other workbooks by " & _

                "the same person who set this password." & DBLSPACE & _

                "Now to check and clear other passwords." & AUTHORS & VERSION

        Const MSGPWORDFOUND2 As String = "You had a Worksheet " & _

                "password set." & DBLSPACE & "The password found was: " & _

                DBLSPACE & "$$" & DBLSPACE & "Note it down for potential " & _

                "future use in other workbooks by same person who " & _

                "set this password." & DBLSPACE & "Now to check and clear " & _

                "other passwords." & AUTHORS & VERSION

        Const MSGONLYONE As String = "Only structure / windows " & _

                 "protected with the password that was just found." & _

                 ALLCLEAR & AUTHORS & VERSION & REPBACK

        Dim w1 As Worksheet, w2 As Worksheet

        Dim i As Integer, j As Integer, k As Integer, l As Integer

        Dim m As Integer, n As Integer, i1 As Integer, i2 As Integer

        Dim i3 As Integer, i4 As Integer, i5 As Integer, i6 As Integer

        Dim PWord1 As String

        Dim ShTag As Boolean, WinTag As Boolean        Application.ScreenUpdating = False

        With ActiveWorkbook

            WinTag = .ProtectStructure Or .ProtectWindows

        End With

        ShTag = False

        For Each w1 In Worksheets

                ShTag = ShTag Or w1.ProtectContents

        Next w1

        If Not ShTag And Not WinTag Then

            MsgBox MSGNOPWORDS1, vbInformation, HEADER

            Exit Sub

        End If

        MsgBox MSGTAKETIME, vbInformation, HEADER

        If Not WinTag Then

            MsgBox MSGNOPWORDS2, vbInformation, HEADER

        Else

          On Error Resume Next

          Do      'dummy do loop

            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

            With ActiveWorkbook

              .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 .ProtectStructure = False And _

              .ProtectWindows = False Then

                  PWord1 = Chr(i) & Chr(j) & Chr(k) & Chr(l) & _

                    Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _

                    Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)

                  MsgBox Application.Substitute(MSGPWORDFOUND1, _

                        "$$", PWord1), vbInformation, HEADER

                  Exit Do  'Bypass all for...nexts

              End If

            End With

            Next: Next: Next: Next: Next: Next

            Next: Next: Next: Next: Next: Next

          Loop Until True

          On Error GoTo 0

        End If

        If WinTag And Not ShTag Then

          MsgBox MSGONLYONE, vbInformation, HEADER

          Exit Sub

        End If

        On Error Resume Next

        For Each w1 In Worksheets

          'Attempt clearance with PWord1

          w1.Unprotect PWord1

        Next w1

        On Error GoTo 0

        ShTag = False

        For Each w1 In Worksheets

          'Checks for all clear ShTag triggered to 1 if not.

          ShTag = ShTag Or w1.ProtectContents

        Next w1

        If ShTag Then

            For Each w1 In Worksheets

              With w1

                If .ProtectContents Then

                  On Error Resume Next

                  Do      'Dummy do loop

                    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

                    .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 Not .ProtectContents Then

                      PWord1 = Chr(i) & Chr(j) & Chr(k) & Chr(l) & _

                        Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _

                        Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)

                      MsgBox Application.Substitute(MSGPWORDFOUND2, _

                            "$$", PWord1), vbInformation, HEADER

                      'leverage finding Pword by trying on other sheets

                      For Each w2 In Worksheets

                        w2.Unprotect PWord1

                      Next w2

                      Exit Do  'Bypass all for...nexts

                    End If

                    Next: Next: Next: Next: Next: Next

                    Next: Next: Next: Next: Next: Next

                  Loop Until True

                  On Error GoTo 0

                End If

              End With

            Next w1

        End If

        MsgBox ALLCLEAR & AUTHORS & VERSION & REPBACK, vbInformation, HEADER

    End Sub
Share

168 thoughts on “How to un-protect Microsoft Excel worksheet without password

  1. Nandakumar K B

    hi!
    I’m unable to open my worksheet, since i forgot my password and also i can’t download any software bcoz in my there not suppose to download or browse. Pls help me..

    [Reply]

  2. Ana T.

    I was totally hesitant when I read this because I kept thinking it couldn’t possibly be this simple. I was wrong because it worked! Thanks a million!!

    [Reply]

  3. Denis

    Fantastic. Now I can go watch the hockey game and not sit at my dessktop rebuilding a worksheet.

    THANKS A MILLION

    [Reply]

  4. Sandya

    Hi,
    Can some one help me how to use the code…
    kindly help me out pls

    [Reply]

    Sandya replied on April 20th, 2012:

    @Sandya, I cleared my password thanks alot

    [Reply]

  5. nobody

    Nice, clean, and efficient code. One suggestion though:
    Add “Application.ScreenUpdating = True” to the two positions in the code right before you find “Exit Sub”. Otherwise you might end up with the screen “frozen”.

    [Reply]

  6. Erik Castillo

    Works Great!!! Tranks a lot!!!

    Funciona genial!!! Muchas gracias por compartir tan excelente código!

    [Reply]

  7. J Johnson

    Thank you Jesus and Praise the LOAD.

    Thank u thank u and thank u.
    After a 24hrs of strugle and searching its realy help me 1000%

    [Reply]

  8. buffet ideas

    I have been surfing online more than three hours today, yet I never found any interesting article like yours. It’s pretty worth enough for me. Personally, if all site owners and bloggers made good content as you did, the net will be a lot more useful than ever before.

    [Reply]

  9. AniSan

    Phenomenal tool! Thank you for sharing! Here’s a donation in support of your charitable works! :) Hoping you continue to share tools, tips and tricks :)

    [Reply]

Leave a Reply

Your email address will not be published. Required fields are marked *

Please Answer: *