◆プロシージャーへの引数の渡し方 ByRef と ByVal
プロシージャーへの変数の渡し方は、2通りあります。 ByRef と ByValです。 ByRef は「参照渡し」と呼ばれ、変数を渡されたプロシージャー側で引数の値を 変更すると、呼び出し元のプロシージャーの変数の値も変わってしまいます。 C のポインタと同じと考えればよいでしょう。 一方、ByVal は「値渡し」と呼ばれ、プロシージャに値を提供するだけで、 ByRef のように呼び出し元のプロシージャーに影響することはありません。 デフォルトでは、ByRef になっています。 呼び出したプロシージャーで引数の値を変更すると、思わぬトラブルになりかねません。 十分に注意してください。 @参照渡し ByRef
Private Sub test1()
Dim counter As Integer
counter = 1
test2 counter
MsgBox counter
End Sub
Dim counter As Integer
counter = 1
test2 counter
MsgBox counter
End Sub
Private Sub test2(ByRef counter)
counter = counter + 1
End Sub
counter = counter + 1
End Sub
変数(counter)の値が変更されています。
A値渡し ByVal
Private Sub test3()
Dim counter As Integer
counter = 1
test4 counter
MsgBox counter
End Sub
Dim counter As Integer
counter = 1
test4 counter
MsgBox counter
End Sub
Private Sub test4(ByVal counter)
counter = counter + 1
End Sub
counter = counter + 1
End Sub
変数(counter)の値は変わっていません。