- 他のサブプロシージャに引数を渡して呼び出す際、値渡し(ByVal)と参照渡し(ByRef)の二つの方法があるよ
- 値渡しと参照渡しの違いは、引数をプロシージャに渡した際、渡した引数にも影響が出るかでないかの違いなんだけど…
- 説明が難しいので、とりあえずサンプルを見てください><
文法
Option Explicit
Sub myMain()
Call myAlert("HOGEHOGE")
End Sub
Sub myAlert(ByVal myHello As String)
MsgBox myHello
End Sub
Callは省略してもOK
- Callを省略する場合は、引数を渡す際のカッコ()も省略する必要があります
Option Explicit
Sub myMain()
myAlert "HOGEHOGE"
End Sub
Sub myAlert(ByVal myHello As String)
MsgBox myHello
End Sub
ByValで値渡し
- 以下のサンプルはmyAlertに引数を渡して実行し、その後渡した引数を表示させるプログラムです
- ByValを使った場合は、呼び出し元のプロシージャの引数myValueに変化はありません
Option Explicit
Sub myMain()
Dim myValue As String
myValue = "Hello"
myAlert myValue
MsgBox myValue
End Sub
Sub myAlert(ByVal myHello As String)
myHello = myHello & " world!!"
MsgBox myHello
End Sub
ByRefで参照渡し
- 以下のサンプルも上記と同じプログラムですが、値を渡す際、ByRefを利用しています
- ByRefを使った場合は、呼び出し元のプロシージャーの引数myValueに、受け取る側のプロシージャの引数を受け取る変数の変化が、参照されます(日本語になってる?><)
Option Explicit
Sub myMain()
Dim myValue As String
myValue = "Hello"
myAlert myValue
MsgBox myValue
End Sub
Sub myAlert(ByRef myHello As String)
myHello = myHello & " world!!"
MsgBox myHello
End Sub