CALL省略時の引数参照渡し(ByValキーワードを利用する)
 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の元の値は変更されません。
---<引用 ここまで>---

Excel97/2000



戻る


Excel Word Access VBA! モーグ