Main |
Sub Main() Dim a As Long Dim b As Long a = 1 b = 1 Call Sub_ByVal(a) Call Sub_ByRef(b) Debug.Print "a=" & a Debug.Print "b=" & b End Sub |
Sub_ByVal |
Sub Sub_ByVal(ByVal x As Long) x = 2 End Sub |
Sub_ByRef |
Sub Sub_ByRef(ByRef x As Long) x = 2 End Sub |
Mainメ
ソッドの実行結果 ([イミディエイト]ウインドウへの出力結果) |
a=1 b=2 |
オブジェクト
型をByValで渡した場合 |
オブジェクト 型をByRefで渡した場合 | |
メソッド(プ
ロジージャ)内で 参照先のオブジェクトの プロパティ値を変えると |
もとの変数が参照していたオブジェクトの プロパティ値も変化している(例3) |
もとの変数が参照していたオブジェクトの プロパティ値も変化している(例3) |
メソッド(プ
ロジージャ)内で 参照先のオブジェクトを 変えると |
もとの変数は メソッド(プロシージャ)実行前に 参照していたオブジェクトと変わらない。(例2) |
もとの変数の参照先オブジェクトは メソッド(プロシージャ)内で変更した オブジェクトとなる(例2) |
Main |
Sub Main() Dim a As Collection Dim b As Collection Set a = New Collection Set b = New Collection Call Sub_ByVal(a) Call Sub_ByRef(b) Debug.Print "a is Nothong? " & (a Is Nothing) Debug.Print "b is Nothong? " & (b Is Nothing) End Sub |
Sub_ByVal |
Sub Sub_ByVal(ByVal x As Collection) Set x = Nothing End Sub |
Sub_ByRef |
Sub Sub_ByRef(ByRef x As Collection) Set x = Nothing End Sub |
Mainメ
ソッドの実行結果 ([イミディエイト]ウインドウへの出力結果) |
a is Nothong? False b is Nothong? True |
Main |
Sub Main() Dim a As Collection Dim b As Collection Set a = New Collection Set b = New Collection Debug.Print "メソッドを実行する前" Debug.Print "a.Count=" & (a.Count) Debug.Print "b.Count=" & (b.Count) Call Sub_ByVal(a) Call Sub_ByRef(b) Debug.Print "メソッドを実行した後" Debug.Print "a.Count=" & (a.Count) Debug.Print "b.Count=" & (b.Count) End Sub |
Sub_ByVal |
Sub Sub_ByVal(ByVal x As Collection) Call x.Add("abcdefg") End Sub |
Sub_ByRef |
Sub Sub_ByRef(ByRef x As Collection) Call x.Add("abcdefg") End Sub |
Mainメ
ソッドの実行結果 ([イミディエイト]ウインドウへの出力結果) |
メソッドを実行する前 a.Count=0 b.Count=0 メソッドを実行した後 a.Count=1 b.Count=1 |