Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5
Default unwanted reinitialization of global variables

I am having an issue with public global variables that appear to be
reinitialized without execution of a specific line in the code to do
so. The variables are declared in Module1 as public (global)
variables using the following code:

Public alpha As String
Public beta As String
Public delta As String
Public epsilon As String

The values of these variables are set in the Workbook_Open() event of
the ThisWorkbook object using the following code:

alpha = ChrW(945)
beta = ChrW(946)
delta = ChrW(948)
epsilon = ChrW(949)

If I open the workbook and immediately run the Routine2 subroutine
(which uses the variables alpha, beta, delta and epsilon), it works
correctly because the values of the variables are as they were set by
the Workbook_Open event. However, the second time I run Routine2, it
does not function as expected because alpha, beta, delta, and epsilon
have been reinitialized to null values. There is no code to change
the values of these variables other than in the Workbook_Open()
event. I have added a MsgBox to check the value of alpha at the first
line of Routine2 and the last line of Routine2. The first time I
execute Routine2, alpha is equal to the value I intend at the first
line and at the last line of the subroutine. The second time I
execute Routine2, the variable has been reset to null by the time the
first line of Routine2 executes. Routine2 is executed by clicking a
command button. No code that I have written executes between the
first click of the command button and the second click of it. I can
solve the problem by setting the values of alpha, beta, delta, and
epsilon at the beginning of Routine2. However, I find it disturbing
that the global variables are somehow getting reinitialized, and I
would like to understand the underlying cause to avoid this issue in
future programming. The reason why I declared these variables as
global was so that I would only have to set their values one time,
upon first opening the workbook.

  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 35,218
Default unwanted reinitialization of global variables

Did you hit the Reset button (or Run|Reset) in the VBE?

Does your code have an End statement in it?
Not "End With", "End Sub", "End If"--just a plain old End statement in it? Did
that line of code get run?

=========

Personally, I think adding an initialization routine wouldn't be a bad idea.

In that same module1 module:

Public VarsAreInitialized As Boolean
Public alpha As String
Public beta As String
Public delta As String
Public epsilon As String


Sub InitializeVars()
alpha = ChrW(945)
beta = ChrW(946)
delta = ChrW(948)
epsilon = ChrW(949)
varsareinitialized = true
end sub

Then in your workbook_open event, replace the assignments with a Call statement.

Call InitializeVars

And before you use any of these variables in any routine:

If varsareinitialized = false then
call initializevars
end if

=======
It may save you some problems later.



wrote:

I am having an issue with public global variables that appear to be
reinitialized without execution of a specific line in the code to do
so. The variables are declared in Module1 as public (global)
variables using the following code:

Public alpha As String
Public beta As String
Public delta As String
Public epsilon As String

The values of these variables are set in the Workbook_Open() event of
the ThisWorkbook object using the following code:

alpha = ChrW(945)
beta = ChrW(946)
delta = ChrW(948)
epsilon = ChrW(949)

If I open the workbook and immediately run the Routine2 subroutine
(which uses the variables alpha, beta, delta and epsilon), it works
correctly because the values of the variables are as they were set by
the Workbook_Open event. However, the second time I run Routine2, it
does not function as expected because alpha, beta, delta, and epsilon
have been reinitialized to null values. There is no code to change
the values of these variables other than in the Workbook_Open()
event. I have added a MsgBox to check the value of alpha at the first
line of Routine2 and the last line of Routine2. The first time I
execute Routine2, alpha is equal to the value I intend at the first
line and at the last line of the subroutine. The second time I
execute Routine2, the variable has been reset to null by the time the
first line of Routine2 executes. Routine2 is executed by clicking a
command button. No code that I have written executes between the
first click of the command button and the second click of it. I can
solve the problem by setting the values of alpha, beta, delta, and
epsilon at the beginning of Routine2. However, I find it disturbing
that the global variables are somehow getting reinitialized, and I
would like to understand the underlying cause to avoid this issue in
future programming. The reason why I declared these variables as
global was so that I would only have to set their values one time,
upon first opening the workbook.


--

Dave Peterson
  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5
Default unwanted reinitialization of global variables

Dave,

Thanks for your response. I like the idea of adding the
initializevars routine. I will definitely add that.

As for why they are getting reinitialized to begin with, I'm still not
sure. I checked all my End statements and none of them are just plain
End. All of them are End With, End If, End Sub, etc. Also, I did not
hit the Reset button. Any other ideas?

- Mary

  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5
Default unwanted reinitialization of global variables

Dave,

I think I figured it out. I looked at a section of the Visual Basic
help called "Understanding the Lifetime of Variables". Here is an
excerpt:

When a variable loses scope, it no longer has a value [....] If a
procedure-level variable is declared with the Static keyword, the
variable retains its value as long as code is running in any module.
When all code has finished running, the variable loses its scope and
its value. Its lifetime is the same as a module-level variable. A
module-level variable differs from a static variable. In a standard
module or a class module, it retains its value until you stop running
your code.

The code stops running between the first click of the Routine2 command
button and the second click of the button. I guess because the code
is no longer running, the variable loses scope and therefore gets
reinitialized to a null value. So, I guess this is the way it is
designed to work, and there is no way to avoid the variables being
reinitialized. I will use the initializevars subroutine that you
suggested.

Thanks!
- Mary



  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5
Default unwanted reinitialization of global variables

But then again... No code is running between the execution of the
Workbook_Open event and the execution of Routine2. Maybe that was not
the answer after all.


  #7   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 4,391
Default unwanted reinitialization of global variables

If your variables are declared in a standard Module (not a class module nor
a WorkSheet/ThisWorkbook module), then scope is not the answer.
Run this code a few times with Var1 declared in a standard module. Then
uncomment the "End" and see the difference.

Option Explicit

Private Sub CommandButton1_Click()

MsgBox Var1
Var1 = "some text"
MsgBox Var1
'End

End Sub

NickHK

wrote in message
oups.com...
Dave,

I think I figured it out. I looked at a section of the Visual Basic
help called "Understanding the Lifetime of Variables". Here is an
excerpt:

When a variable loses scope, it no longer has a value [....] If a
procedure-level variable is declared with the Static keyword, the
variable retains its value as long as code is running in any module.
When all code has finished running, the variable loses its scope and
its value. Its lifetime is the same as a module-level variable. A
module-level variable differs from a static variable. In a standard
module or a class module, it retains its value until you stop running
your code.

The code stops running between the first click of the Routine2 command
button and the second click of the button. I guess because the code
is no longer running, the variable loses scope and therefore gets
reinitialized to a null value. So, I guess this is the way it is
designed to work, and there is no way to avoid the variables being
reinitialized. I will use the initializevars subroutine that you
suggested.

Thanks!
- Mary



  #8   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 4,391
Default unwanted reinitialization of global variables

For testing you can declare these string as constants (with values of "a",
"b" etc) and see where/when the values are being reassigned, as an error
will occur.
Or use the Watch window to see when the values change.

However, I suspect you really do have an End or are resetting, as Dave
suggested, though.

Depending on what you are doing, you could use the Const approach, they
format the cell(s) with the Symbol font.

NickHK

wrote in message
oups.com...
Dave,

Thanks for your response. I like the idea of adding the
initializevars routine. I will definitely add that.

As for why they are getting reinitialized to begin with, I'm still not
sure. I checked all my End statements and none of them are just plain
End. All of them are End With, End If, End Sub, etc. Also, I did not
hit the Reset button. Any other ideas?

- Mary



Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Global variables Ed Excel Programming 6 November 19th 06 10:55 PM
global variables Nicolas Roth Excel Programming 3 September 25th 06 04:40 PM
Global Variables [email protected] Excel Programming 0 July 7th 06 10:53 AM
Global Variables mattsvai[_11_] Excel Programming 4 February 3rd 06 05:02 PM
Global Variables Francis Brown Excel Programming 9 November 27th 05 06:14 PM


All times are GMT +1. The time now is 10:17 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"