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の元の値は変更されません。
---<引用 ここまで>---
|