Life of a variable

M

Mike Fogleman

I have a huge amount of code, over 80 subs, spread over 4 general modules,
with a userform and workbook open & close. Most variables are keeping their
last value when the routine has ended. When I run the routine again, on
different data, the results are not correct. Re-running the routine
immediately on this data works.

2 questions: VB help says a variable will retain its' scope when calling one
sub from another. I have found that if the called sub is in another module,
scope is lost. Is this normal? Declaring the variable Public in the
originating module works, so I have a lot of Public variables to keep the
code running as it criss-crosses the 4 modules.

Second, is there a global way to reset the variables between runs, like the
Reset button on the VB Editor?
TIA, Mike
 
T

Tom Ogilvy

Except for Public variables declared at the top of general modules, a
variables scope is limited to the procedure in which it is declared. You
can pass a variable in the argument list of procedure (either byref or
byval). If byval, think of it as being local to that procedure (it is just
initialized by the calling procedure). If byref, then the variable is
visible to both procedures until the called procedure returns control back
to the calling procedure. Once code stops running, the only variables
retaining there values would be public variables - think of them as being
"local" to the workbook/project - so as long as that is running, they retain
their values unless you take action (such as reset) to change them.

The only generalized command that will clear all variables is the END
statement, but it also halts code immediately.
 

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