|
皆さん 今晩は。
私も勉強のために、ちょと書いてみます。
ByRef のヘルプを見ると
参照渡し
プロシージャに引数として変数を渡す方法の 1 つ。参照渡し (参照による引き渡し) で変数をプロシージャに渡すと、その変数の内容は、呼び出されたプロシージャ内で変更することができます。参照渡しでは、呼び出されたプロシージャ内では、渡された変数のメモリ内の格納場所に対して、直接操作を行います。したがって、呼び出されたプロシージャ内で渡された変数の値を変更すると、呼び出し側のプロシージャで参照する元の変数の値も変更されます。
とありますね。
クラスモジュールは別として、下記を実行すると、1回目の MsgBox "s= " & s は、"BB" を表示しますね。
2回目の MsgBox "s= " & s は、"AA" を表示しますね。
この変化が、参照渡しということだと思います。
こんな変化をさせたいということでしょうか?
それから、これだけでは、クラスモジュールについては、よく分りません?
Sub rrr()
Dim wk As New CWork
'r2 wk.sTargetFolder = "WW"
'Debug.Print "1.""" & wk.sTargetFolder & """"
Dim s As String
s = "BB"
MsgBox "s= " & s
r2 s
MsgBox "s= " & s
'Debug.Print "2.""" & s & """"
'何故 1 と 2 の出力結果がことなるの?
End Sub
Private Sub r2(ByRef lpValue As String)
'サンプルとして、アクティブ・セルの内容を代入する処理にしていますが、
'本来は色々な計算を行った結果を代入するものになります。
'また、戻り値は関数にあたえた引数の成否の結果を示す値に使うため、
'戻り値で計算結果返すことはできません。
lpValue = "AA" 'ActiveCell.Value
End Sub
>
>オブジェクトのプロパティは全て値渡しだと思いますが・・・。
>
>Sub test()
> call test1(range("a1").value)
>end sub
>
>sub test1(myvalue as variant)
> myvalue=123
>end sub
>
>
>これだって、セルA1に値ははいりませんよね?
>
>Call aaa(thisworkbook)
>
>これも値渡しです(Thisworkbook Applicationのプロパティです)
|
|