0% found this document useful (0 votes)
185 views

AllInternalPasswords Document Explanation and VBA

1. The document provides instructions for removing password protection from a password protected Excel workbook if the password is unknown or forgotten. 2. It describes using Visual Basic for Applications (VBA) code to try all possible combinations of letters and numbers to uncover the password hashed by Excel. 3. The code will remove any passwords protecting worksheets or the overall workbook structure. Users are advised to back up their workbook after running the code.

Uploaded by

Alexandru Campan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
185 views

AllInternalPasswords Document Explanation and VBA

1. The document provides instructions for removing password protection from a password protected Excel workbook if the password is unknown or forgotten. 2. It describes using Visual Basic for Applications (VBA) code to try all possible combinations of letters and numbers to uncover the password hashed by Excel. 3. The code will remove any passwords protecting worksheets or the overall workbook structure. Users are advised to back up their workbook after running the code.

Uploaded by

Alexandru Campan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
You are on page 1/ 4

What do you do if you or someone has forgotten or lost or never had the password to protect a

worksheet and/or workbook structure?

1. You must remember that removing password protect may be a breach of law and/or your
employment contract. It should only be done if you clearly have the right to do so.

2. Microsoft are fairly relaxed over my publication of this process: it cut down the
calls to their Help Desk and increased the Help Desk success ratio. I’m not sure they
appreciate my comments on ‘fairy floss’ but since they call it ‘cotton candy’, they
probably don’t understand!

3. Read Point 1. again. If in doubt, don’t do it without legally qualified advice.

4. You’ll need a non-networked computer because networked computers should never allow
users to create and run the removal code. Cost will be very low and I’ll there will be other uses for it

5. Now pass this Word file over to someone at beginner’s level in Excel Visual Basic For Applications
(VBA)

I acknowledge publication of an algorithm but no more by Bob McCormick and the signifant
Tidying up of my ‘crude’ coding by Excel MVP JE McGimpsey. I also acknowledge that I started
the idea early Boxing Day 2002 and published my ‘crude’ code later that day for a distressed
poster on a user group. ‘JE’ was similarly at a loose end and offered, very politely, to remove
my offences against all the rules of programming.

Word Document:

Microsoft actually claims when setting those passwords that losing it


is fatal. But that is not so.

A little ‘history’ will help you understand the logic behind the 2012 onwards process.

Up until Excel 2012 the solution was


1. Get a non-networked computer. Networked computers should never allow users to use
Visual Basic for Appications (VBA).
2. Get someone moderately familiar with Visual Basic For Applications (VBA) to copy
and paste the code below into a VBA module of the ‘offending’ workbook.
3. Back into Excel and use the commands Tools > Macros > Select AllInternalPasswords > Run
4. A password of relatively meaningless As and Bs and an X will be found and both
Worksheet and Workbook protection will be removed.
5. You’ll now possibly have to unhide Row, Columns, and Sheets. And selecting all cells
on each sheet in turn, use Format > Cells > Select ‘Protection Tab’ > Remove a check
if there is one from ‘Hidden’.

Then in 2012 Microsoft claimed increased strength of these passwords and that they could
not now be broken. I begged to differ!

The solution is
1. Use the File > Save As command and to select the option of saving the workbook as a pre-2012
workbook. You will lose those wonderful ‘fairy floss’ features built into 2012 onwards. But only
rarely will the user have employed features that impact upon quantitative results.
2. In new workbook you can then follow steps 1-5 above.
3. With passwords removed you can now save the file back up to your normal Excel version.
4. You’ve lost all the 2012 onwards features but, probably crucially, the data and formulae that were
protected are now unprotected.

Here’s the code:

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

You might also like