Callを省略したSubプロシージャ呼び出しの場合、実引数をかっこ()で囲むと、「値渡し」つまり、ByValキーワードを使ったことと同じとみなされます。
次のサンプルを見てください。
Sub Macro1()
Dim a As String
a = "Excel"
Macro2 a
MsgBox a
Macro3 (a)
MsgBox a
End Sub
Sub Macro2(ByVal s As String)
s = "VBA"
End Sub
Sub Macro3(s As String)
s = "VBA"
End Sub
上記の例では、「Macro3 (a)」と、実引数の「a」をかっこ()で囲んでいます。この場合、ByValキーワードを使わなくても変数は「値渡し」になります。したがって、Macro2、Macro3共に値渡しとなるため、メッセージボックスには「VBA」ではなく「Excel」と2回表示されることになります。
Office2000DeveloperのMSDNライブラリCD-ROMの「Excel Visual Basic リファレンス」にこの件に関するトピック「ByRef 引数の型が一致しません」が紹介されています。
今回の話題に関連する部分のみ以下に引用します。
---<引用 ここから>---
Dim MyVar
MyVar = 3.1415
Call SomeSub((MyVar))
Sub SomeSub (MyNum As Integer)
MyNum = MyNum + MyNum
End Sub
引数をかっこで囲んで引き渡すと、式として評価されます。評価結果は一時的な場所に格納され、その一時的な格納場所への参照がプロシージャに渡されます。したがって、MyVarの元の値は変更されません。
---<引用 ここまで>---