ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   How to know if a variable has been reset inside other function (https://www.excelbanter.com/excel-programming/375960-how-know-if-variable-has-been-reset-inside-other-function.html)

Alex St-Pierre

How to know if a variable has been reset inside other function
 
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!
--
Alex St-Pierre

RB Smissaert

How to know if a variable has been reset inside other function
 
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


"Alex St-Pierre" wrote in message
...
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!
--
Alex St-Pierre



Alex St-Pierre

How to know if a variable has been reset inside other function
 
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

--
Alex St-Pierre


"RB Smissaert" wrote:

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


"Alex St-Pierre" wrote in message
...
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!
--
Alex St-Pierre




RB Smissaert

How to know if a variable has been reset inside other function
 
That's it. Looks you learned something useful there.

RBS

"Alex St-Pierre" wrote in message
...
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

--
Alex St-Pierre


"RB Smissaert" wrote:

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


"Alex St-Pierre" wrote in
message
...
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!
--
Alex St-Pierre





Jim Thomlinson

How to know if a variable has been reset inside other 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...
--
HTH...

Jim Thomlinson


"RB Smissaert" wrote:

That's it. Looks you learned something useful there.

RBS

"Alex St-Pierre" wrote in message
...
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

--
Alex St-Pierre


"RB Smissaert" wrote:

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


"Alex St-Pierre" wrote in
message
...
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!
--
Alex St-Pierre





RB Smissaert

How to know if a variable has been reset inside other function
 
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" wrote in message
...
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...
--
HTH...

Jim Thomlinson


"RB Smissaert" wrote:

That's it. Looks you learned something useful there.

RBS

"Alex St-Pierre" wrote in
message
...
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

--
Alex St-Pierre


"RB Smissaert" wrote:

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


"Alex St-Pierre" wrote in
message
...
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!
--
Alex St-Pierre







All times are GMT +1. The time now is 06:18 PM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
ExcelBanter.com