|
追記です
ご提示頂いたコードで下記 追記※ をしてみました
結果
' 変数outは渡しているが、Functionで処理されていない。
'従って、変数outの内容はByVal_strの戻り値には全く関係ない。
'結果としてはByVal_st、ByRef_strは同じ処理をしている。
'ByVal、ByRefは関係ない。
となっているのですが
Debug.Print "S_ByVal:" & str 'S_ByVal:Val '値渡し(ByVal) 元値
の動作とは異なっている・・・
頭がうにうにの状態です・・・
何かありましたらよろしくお願い致します
追記コード
Sub Test()
' ByValの時は123のようになるよな気がするのですが hoge fuga になってしまいます
Dim str1 As String
Dim str2 As String
Dim out As String
Dim ret As Long
str1 = "hoge"
str2 = " fuga"
out = "123"
' 変数outは渡しているが、Functionで処理されていない。
'従って、変数outの内容はByVal_strの戻り値には全く関係ない。
Debug.Print "Test1:" & ByVal_str(str1, str2, out)
Debug.Print out '追記※1
'上記と同じ
Debug.Print "Test2:" & ByRef_str(str1, str2, out)
Debug.Print out '追記※2
'結果としてはByVal_st、ByRef_strは同じ処理をしている。
'ByVal、ByRefは関係ない。
'参照渡しの戻り値を使い且つ、関数の戻り値を使う場合はこんな場合
'もあります。(たまにですが)
ret = sample(str1, str2, out)
Debug.Print "sample : sample(str1, str2, out)"
Debug.Print "結合された文字列 :" & out
Debug.Print "結合された文字列の文字数 :" & ret & "個"
End Sub
'sample:渡された文字列を結合した文字列を返す
'引数 pret:pa、pb を結合したデータを格納する
Function sample(ByVal pa As String, ByVal pb As String, ByRef pret As String) As Long
On Error GoTo trap
pret = pa & pb
sample = Len(pret)
Exit Function
trap:
sample = 0
End Function
Function ByVal_str(ByVal idx1 As String, ByVal idx2 As String, ByVal modori As String) As String
ByVal_str = idx1 & idx2
Debug.Print "ByVal_str:" & ByVal_str
Debug.Print "ByVal_str modori:" & modori '追記※3
End Function
Function ByRef_str(ByVal idx1 As String, ByVal idx2 As String, ByRef modori As String) As String
ByRef_str = idx1 & idx2
Debug.Print "ByRef_str:" & ByRef_str
Debug.Print "ByRef_str modori:" & modori '追記※4
End Function
|
|