namko
namko

Reputation: 647

Byref vs Byval vba clarification

I was writing some VBA to futher my understanding of Byref and Byval. This is what I am using:

Private Function Checkcase()
    Dim i As Integer
    i = 1
    Debug.Print i
    num(i)
    Debug.Print i
    End Function


Public Function num(ByRef i As Integer)
    i = 5
End Function

Output
1
1

However, when I use the call keyword in front of num(i) like:

call num(i)

The output changes to
1
5

I was expecting the output to be 1 and 5 in both cases as I am changing the reference of the variable i

Upvotes: 1

Views: 355

Answers (1)

Vincent G
Vincent G

Reputation: 3188

num(i) is the error here. When you call a sub or a function without getting the return value, you must not put parentheses around the arguments.

When you pass arguments with parentheses to a function expecting ByRef arguments, those are automatically cast to ByVal.

Either use Call num(i) or remove the parentheses num i

References: Call :

If you omit the Call keyword, you also must omit the parentheses around argumentlist.

As always, Cpearson site is a must read

Upvotes: 3

Related Questions