参照渡し(ByRef)と値渡し(ByVal)の違いについて紹介します。どちらもプロシージャやファンクションの引数1つ1つに指定するものとなります。
サンプルプログラムでは「ByRef」、「ByValue」、「指定なし」でプロシージャを3つ定義して、それぞれを呼び出した結果を表示しています。呼び出し方も3パタンに分けて「Callあり」、「Callなし括弧あり」、「Callなし括弧なし」の3パタンに分けています。差異については、よーく確認してみてください。
ByRef、ByValのサンプルプログラム
Option Explicit
' ByRef指定
Sub test1(ByRef val As Integer)
    val = val + 1
End Sub
' ByVal指定
Sub test2(ByVal val As Integer)
    val = val + 1
End Sub
' 指定なし
Sub test3(val As Integer)
    val = val + 1
End Sub
Sub sample()
    Dim v As Integer
    
    v = 0
    Call test1(v)
    Debug.Print v   '1  参照渡し
    
    v = 0
    Call test2(v)
    Debug.Print v   '0  値渡し
    
    v = 0
    Call test3(v)
    Debug.Print v   '1  指定なしは、参照渡し
    
    v = 0
    test1 v         '   Callなし、括弧なし
    Debug.Print v   '1  参照渡し
    v = 0
    test2 v         '   Callなし、括弧なし
    Debug.Print v   '0  値渡し
    v = 0
    test3 v         '   Callなし、括弧なし
    Debug.Print v   '1  指定なしは、参照渡し
    v = 0
    test1 (v)       '   Callなし、括弧あり
    Debug.Print v   '0  括弧ありは強制的に値渡しを表す
    
    v = 0
    test2 (v)       '   Callなし、括弧あり
    Debug.Print v   '0  括弧ありは強制的に値渡しを表す
    
    v = 0
    test3 (v)       '   Callなし、括弧あり
    Debug.Print v   '0  括弧ありは強制的に値渡しを表す
End Sub 
  
  
  
  