run procedure when exit design mode

W

Wim SKW

Hi,

I have some procedures with static variables like "blnInitDone" to prevent a
very large and time-consuming piece of code to run more than once. These
procedures are typically called when opening the workbook.
Now every time I enter and exit design mode, these variables lose their
value so the large piece of code gets run again (which isn't necessary).

Is there any way to make a procedure run automatically whenever I exit
design mode as to initialise the values correctly? Or to link a macro to the
"Exit Design Mode" button (but then I guess you have to be able to determine
whether you're already in desing mode or not, otherwise the macro also gets
run when you enter design mode...)

Thanks.
-=Wim=-
 
N

NickHK

I suppose the problem is that you have a Boolean whose value upon
initialisation is False. Hence, you cannot tell if that is the real, set
value, or the value assigned due to a Reset/End.
Why not use a say a string instead, so you can test if it has been
initialised and if not set it to the required value, maybe either "True" or
"False"

Dim TestString As String

Private Sub CommandButton1_Click()

Debug.Print StrPtr(TestString) = 0

If MsgBox("Call End ?", vbYesNo) = vbYes Then
End
Else
TestString = ""
End If

End Sub

NickHK
 
W

Wim SKW

NickHK said:
I suppose the problem is that you have a Boolean whose value upon
initialisation is False. Hence, you cannot tell if that is the real, set
value, or the value assigned due to a Reset/End.
Why not use a say a string instead, so you can test if it has been
initialised and if not set it to the required value, maybe either "True" or
"False"

Mmm. Not really, Nick.
When I enter and exit design mode this string would also loose its value! I
could store the value an a worksheet cell, but then I would have to read this
value in EVERY event procedure, which is not practical. This is the reason
why I've used a variable in the first place.
Basically the code that is run upon opening the workbook should also be run
when exiting design mode, preferably in an automatic way.
Any suggestions?
-=Wim=-
 
D

Dave Peterson

Maybe you could just run your initialization routine manually.

But it may be worth your effort to check to see if the variables are initialized
before you use them.

Add another variable in a general module:

Public VarsAreInitialized As Boolean

Then before you rely on them being ok (in each sub that uses them):

If varsareinitialized = false then
call initializevars
end if

Have one procedure that does the work:

Sub InitializeVars()
'initialize all your variables
'plus this one:
VarsAreInitialized = true
end sub
 

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