AllInternalPasswords.xls

N

Nathan Gutman

This code was posted here sometimes ago to recover Excel passwords.
I am using XL97 and Win95.
When trying to run it it gets to line:

WinTag = .ProtectStructure Or .ProtectWindows

and gives runtime error 91

Object variable or With block variable not set.

Can someone help to undertand why and how to fix that?

_________________________________________________________________
Option Explicit

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
 
N

Norman Harker

Hi Nathan!

I've sent an original copy.

Try that by opening and then with your protected workbook active use

Tools > Macro
Select AllInternalPasswords
Run

Report back. First case of it not working.


--
Regards
Norman Harker MVP (Excel)
Sydney, Australia
(e-mail address removed)
Excel and Word Function Lists (Classifications, Syntax and Arguments)
available free to good homes.
 
N

Nathan Gutman

Thanks, I got it and it ran OK but when I wanted to view/expand the
Project in VBA I got "Project unviewable".
I am using Excel97. I understand that his can happen when you save the
workbook under Excel newer than 97.
Could you possibly save it as XL97 and e-mail another copy.
Thank you very much.
 
N

Nathan Gutman

Thanks for the link. This particular link did not work but I found the
workbok on your site unless at this link there is some different.
What I downloaded allinternalpasswords.xls from your site it gave me
the same error.
I am using XL97 - could this have anything to do with how it's
running?
 
J

J.E. McGimpsey

Sorry about the link - i only partially pasted over the URL.

As far as the error, I can't reproduce it in any version I have (I
don't have XL97), but where it's erroring out indicates that the
ActiveWorkbook is not being properly referenced.

In XL97, that often happens when a macro is initiated from an
activeX button that does not have the .TakeFocusOnClick property set
to False.
 
N

Norman Harker

Hi Nathan!

That's because the VBA project is protected.

The password is

not4u2see

But don't tell anyone!

--
Regards
Norman Harker MVP (Excel)
Sydney, Australia
(e-mail address removed)
Excel and Word Function Lists (Classifications, Syntax and Arguments)
available free to good homes.
 
N

Nathan Gutman

I can not use the password because it does not display the "Enter
Password" dialog. It displays "Project Unviewable".
You would need to unprotect the project at your end and e-mail the
unprotected version. Apparently there is a problem with downward
compatibility. As I have mentioned I use XL97 and you probably use a
newer version.
Thanks
 
N

Norman Harker

Hi Nathan!

Sent an unprotected version.

--
Regards
Norman Harker MVP (Excel)
Sydney, Australia
(e-mail address removed)
Excel and Word Function Lists (Classifications, Syntax and Arguments)
available free to good homes.
 
N

Nathan Gutman

Thanks, worked wonderfully and I noticed some code changes.
It will take me some time to understand the code and learn from it.

Now, is something like that available to unprotect VBA Projects?
 
N

Norman Harker

Hi Nathan!

There are some commercial programs that are supposed to unprotect VBA
projects but I've never tried them.

See:

John Walkenbach:
http://j-walk.com/ss/excel/links/pword.htm

--
Regards
Norman Harker MVP (Excel)
Sydney, Australia
(e-mail address removed)
Excel and Word Function Lists (Classifications, Syntax and Arguments)
available free to good homes.
 
N

Nathan Gutman

I am not really interested in unprotecting any specific projects.
I am just curious how all that works and want to learn more about
recovering passwords.
I would like to be able to write a routine similar to
AllInternalPasswords that would work on VBA projects or if it were
somewhere available would to learn how it was done.
Nathan
 
N

Norman Harker

Hi Nathan!

Re:
"I would like to be able to write a routine similar to
AllInternalPasswords that would work on VBA projects or if it were
somewhere available would to learn how it was done."

Some of the principles of AllInternalPasswords could be followed but
the nature of the difference between VBA and internal worksheet and
structure passwords is such that the same limited character looping
won't work. Note that AllInternalPasswords only finds "a" password
that will work, *not* the actual password that was used.

--
Regards
Norman Harker MVP (Excel)
Sydney, Australia
(e-mail address removed)
Excel and Word Function Lists (Classifications, Syntax and Arguments)
available free to good homes.
 
J

J.E. McGimpsey

Not to mention that you'd have to use SendKeys, since VBA can't
access the project password directly. I suspect that would slow
things down immensely.
 
N

Norman Harker

Hi JE!

I suppose that we ought to add that the inherent / actual nature of
internal worksheet protection is to protect against "uninitiated"
accidental damage to cell formulas etc. That is really the limit of
Worksheet password protection. With VBA programs you need a greater
level of experience and are probably aiming more at protecting your
copyright / trade secrets. Also, presumably, your experience has come
with more rigorous approaches to remembering / recording your
passwords (he says glibly after having taken over an hour remembering
the password for an old project!!)

--
Regards
Norman Harker MVP (Excel)
Sydney, Australia
(e-mail address removed)
Excel and Word Function Lists (Classifications, Syntax and Arguments)
available free to good homes.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top