There are two ways to pass arguments to Subs or Functions.
ByRef passes the address of the argument. Changing the subs argument does change the value of the argument in the outer sub.
ByVal creates a new argument and sets the value of that argument to equal the argument in the calling statement. Actions in the subordinate routine do not affect the value of the argument of the calling statement.
This example shows what I mean.
Code:
Sub test()
Dim myNumber As Long
myNumber = 1
MsgBox "myNumber = " & myNumber
Call increaseByRef(myNumber)
MsgBox "myNumber = " & myNumber
myNumber = 1
MsgBox "myNumber = " & myNumber
Call increaseByVal(myNumber)
MsgBox "myNumber = " & myNumber
End Sub
Sub increaseByRef(ByRef inNumber As Long)
inNumber = inNumber + 1
MsgBox "increased to " & inNumber
End Sub
Sub increaseByVal(ByVal inNumber As Long)
inNumber = inNumber + 1
MsgBox "increased to " & inNumber
End Sub
Unless specified, Subs pass arguments ByRef and Functions' arguments are passed ByVal.
The VB Editor help system has more info.