How to know if a variable has been reset inside other function

  • Thread starter Thread starter Guest
  • Start date Start date
G

Guest

Hi,
My program use a lot of function and sometimes, the variables are reset
because it call a function that use the same variable name. I have sometimes,
Function inside Function inside Function and it's very hard to make all
differents. Is there a way to insure no variable will be reset?? Like a
program compilation or execution option or something else?
Thanks a lot!
 
If your intention is to use the variable in the function and alter it only
temporarily while the function does it job then the answer is to pass
those variables ByVal.
Default is ByRef and that can leave it in an altered state after the
function
is finished.
Best to look this up in the VBA help.

RBS
 
Thanks, it's what I needed. I will use ByVal inside function.
If I use twice i as in the example below, i is not reset in the function.
What I understand is that it's only the elements inside function that are
re-formated (with ByRef).

Sub temp()
Dim iValue as integer
iValue = 10
For i = 1 to 10
Temp = myFunction(iValue)
Next i
End Sub

Function myFunction(ByVal iValue as integer)
Dim i as integer
For i = 1 to 3
'treatment...
Next i
End Function
 
Just to elaborate... You should always pass by value unless you have reason
not to (IMO). It makes debugging a pile easier since you know the values of
variables can not be changed by other subs or functions. You should note
however that there is a penalty to pass by value and that is that you are
passing a copy of the variable and there is some (ususally very small)
overhead in creating the copy to be passed. The amount of overhead depends on
the variable that you are passing and in the case of strings it can be a fair
bit of overhead. So if you are in the need for speed and you are passing
strings in a loop you should probably pass by reference. Just my 2 cents...
 
That's one approach.
I do opposite as speed is often important and many of my functions are used
in loops.
It saves me worrying about functions possibly slowing things down.
When I write the function I just check it doesn't alter any variables that
it shouldn't.
ByRef is the default, so it saves a bit of coding as well.

RBS

Jim Thomlinson said:
Just to elaborate... You should always pass by value unless you have
reason
not to (IMO). It makes debugging a pile easier since you know the values
of
variables can not be changed by other subs or functions. You should note
however that there is a penalty to pass by value and that is that you are
passing a copy of the variable and there is some (ususally very small)
overhead in creating the copy to be passed. The amount of overhead depends
on
the variable that you are passing and in the case of strings it can be a
fair
bit of overhead. So if you are in the need for speed and you are passing
strings in a loop you should probably pass by reference. Just my 2
cents...
 

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

Back
Top