"Static" Behavior Without Static Defn

S

Steve Drenker

The variable "sEscRate" is behaving as if it is declared Static in the
following subroutine & function. I'm puzzled why this is. Each invocation of
the function in the sub should be passing it the variable sEscRate with a
value of 0.05. I am expecting each time TestFunc will return 1.05, not the
totalized amount?

Why is it behaving as if it were declared Static? What am I missing here?

Sub TestSub()
Dim sEscRate As Single
Dim i As Integer

sEscRate = 0.05
For i = 1 To 10
Debug.Print TestFunc(sEscRate)
Next i
End Sub


Function TestFunc(EscRate As Single) As Single
EscRate = EscRate + 1
TestFunc = EscRate
End Function



Results Results
Obtained Expected
1.05 0.05
2.05 0.05
3.05 0.05
4.05 0.05
5.05 0.05
6.05 0.05
7.05 0.05
8.05 0.05
9.05 0.05
10.05 0.05
 
J

JE McGimpsey

Steve Drenker said:
D'Oh! I figured it out. It took me a while to remember that parameters
passed to functions are by default passed "ByRef". A simple "ByVal" in the
function solves the problem:

Function TestFunc(ByVal EscRate As Single) As Single

I swear, if I stop programming in VBA for 4 or 5 months, I must forget half
of what I struggled to learn in the previous go-round. This little
brain-fade cost me a couple hours today.

This is a great reason to *always* specify byRef or byVal for arguments,
as well as typing them.

BTW - Singles are internally handled as Doubles, so there's usually no
reason not to use doubles. Same with integers/longs.
 
S

Steve Drenker

JE...single vs double, int vs long.

Old habit. 4 byte vs 8 byte, 2 vs 4 byte.

I've got 2 GB in this machine, so saving a few bytes doesn't make much
sense.

You're right about always specifying ByRef and ByVal.

Steve
 

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

Similar Threads


Top