Evaluated First

It is possible to evaluate the argument before it is passed into a subroutine or function.
This can be achieved by enclosing it inside its own parentheses.
This has nothing to do with the Call keyword.


Calling Subroutines

There are two ways to call a subroutine.
The first is to use the Call keyword in which case the arguments have to appear in parentheses.
The second is to not use the Call keyword in which case the arguments DO NOT have to appear in parentheses.

Call Integer_ByVal(var1) 
Integer_ByVal var1

You can enclose arguments inside there own set of parentheses to force them to be evaluated first.

Call Integer_ByVal((var1)) 
Integer_ByVal (var1)

If you are not using the Call keyword this implicit evaluation is harder to spot.


Example

The following snippets demonstrates that when you enclose your variables in parentheses you get different results.
You should always try and use the Call keyword when you are passing control to a subroutine to avoid confusion.

Sub Integers_AsIntegers() 
   Dim var1 As Integer
   
   var1 = 100
   Call Integer_ByVal(var1)
   Debug.Print var1 '100

   var1 = 100
   Call Integer_ByRef(var1)
   Debug.Print var1 '300
   
'Variables are evaluated first when enclosed in parentheses
   var1 = 100
   Integer_ByRef (var1)
   Debug.Print var1 '100
   
'Variables are evaluated first when enclosed in parentheses
   var1 = 100
   Call Integer_ByRef((var1))
   Debug.Print var1 '100
End Sub

Public Function Integer_ByVal(ByVal var2 As Integer)
   var2 = 200
End Function
Public Function Integer_ByRef(ByRef var2 As Integer)
   var2 = 300
End Function

© 2018 Better Solutions Limited. All Rights Reserved. © 2018 Better Solutions Limited TopPrevNext