• ベストアンサー

この例は「何渡し」と言うのでしょうか?

mokichi3216の回答

  • ベストアンサー
回答No.5

省略したときは、ByRef(参照渡し)あるいはByVal(値渡し)のどちらかになると思います。 以下のサンプルで、 test2の引数の"ByRef"となっている部分を"ByVal"、""(省略)と変更して動作を比較すれば、 何渡しになっているか判明するのではないでしょうか。 '---------------------- Sub test1() Dim a As String a = "aaa" MsgBox "aの参照先: " & VarPtr(a) & vbCr & "(test2実行前の)aの内容: " & a Call test2(a) MsgBox "aの参照先: " & VarPtr(a) & vbCr & "(test2実行後の)aの内容: " & a End Sub '---------------------- Sub test2(ByRef str As String) MsgBox "strの参照先: " & VarPtr(str) & vbCr & "strの内容: " & str str = "bbb" End Sub

hujisafari33
質問者

お礼

どうもありがとうございました。

関連するQ&A

  • これは参照渡し・値渡ししてる事になりますか?

    Dim a As String Sub マクロ1() a = "test" Call マクロ2 a = Empty End Sub Sub マクロ2() MsgBox a End Sub これは参照渡し・値渡ししてる事になりますか? ByRefやByValを使わない限り、 参照渡しまたは値渡ししてるとは言えないのでしょうか? ご回答よろしくお願いします。

  • 参照渡し(ByRef)

    参照渡しについてわからないのですが Option Explicit Dim buf As String Sub Sample1() buf = "aaa" Call Sample2("bbb") MsgBox buf End Sub Sub Sample2(ByRef a As String) a = "ccc" End Sub を実行すると、msgboxには、aaaが表示されますが、 途中のbbb,cccはどんな意味があるのでしょうか? また、 Sub Sample2(ByRef a As String) を Sub Sample2(a As String) にしてもコードは問題なく動きますが、 ByRefは役に立ってるのですか?

  • 参照渡しをする時は、渡される側は違う変数を使う?

    参照渡しをする時は、渡される側は違う変数を使うべきなのでしょうか? VBAのお勉強をしているのですが Sub test1() Dim mystr As String mystr = "a" Call test2(mystr) Call test3(mystr) End Sub Sub test2(ByRef mystr As String) MsgBox mystr End Sub Sub test3(ByRef mystr2 As String) MsgBox mystr2 End Sub この場合、test2とtest3ではどちらを使ったほうがいいのでしょうか? test3は、mystr2 というmystrとは違う変数を使っていますが、 test2は、test1のmystrと同じ変数を使っています。 test1と同じ変数を使おうが違う変数を使おうが どちらにしろ (ByRef 変数名 As String) で宣言するから、変わらないのでしょうか?

  • 【1】と【2】のvbaは同じ意味ですか?

    【1】 Option Explicit Sub test1() Call test2("aaa") End Sub Sub test2(MyStr As String) MsgBox MyStr End Sub 【2】 Option Explicit Dim MyStr As String Sub test1() MyStr = "aaa" Call test2 End Sub Sub test2() MsgBox MyStr End Sub 結果は同じですが、中身が違います。 今後コードを作っていく上で どちらの方式の方が良いのでしょうか?

  • VBSの関数で複数の値を返したい

    関数から2つの値を返したいと思っています。 ByRefで以下のようにすれば変数STRの内容を書き換えられると思ったのですが、エラーにはならないものの値は変わらないようです。 このような使い方はできないのでしょうか? STR = "STR" TEST(STR) Msgbox STR Sub TEST(ByRef STR) STR = "TEST" End Sub

  • Webサービスの参照渡し

    PHP初心者です。調べても有効な情報が得られなかったので質問します。 PHP(5.2.6)から(VB.NET2008で作成した)Webサービスを呼び出したのですが、 引数が値渡しになっているらしく、Webサービスで設定した値が返ってきません。 参照渡しにするにはどうしたらいいのでしょうか? -------------------------------------------------------------- ***[PHP]********************************** <?php $client = new SoapClient("http://IPAdress//WebSv.asmx?WSDL"); $AAA = "AAA"; $params = array('rAAA'=>$AAA); $result = $client->__soapCall("ATOB", array('parameters' => $params)); print_r($AAA); ?> ****************************************** ***[Webサービス]************************** <WebMethod()> _ Public Sub ATOB(ByRef rAAA As String) rAAA = "BBB" End Sub ****************************************** -------------------------------------------------------------- PHPを実行すると BBB と表示させたいが AAA と出てくる。 ちなみに呼び出し自体はうまくいっていて、エラーにもなっていません。

    • ベストアンサー
    • PHP
  • VB6で作成した自作DLLをVB.NETで呼び出し例外発生時に参照渡しの引数に値を設定する方法

    VB6で作成した自作のDLLをVB.NET2005で作成したEXEから呼び出した際に、DLLメソッドの正常・異常終了に関わらず第2引数の戻り値に第1引数の値を設定したいと考えていますが旨くいきません。 何かよい方法はないでしょうか? 以下、簡単なサンプルです。 =========================== VB6 DLL =========================== Public Sub getDataForTest(ByVal strIn As String, ByRef strOut As String) Dim intData As Integer 'strInの値をstrOutに代入 strOut = strIn 'strInの値を1で割り算 intData = CInt(strIn) / 1 End Sub =============================================================== =================== DLL呼び出し正常パターン =================== Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim objCom As New Project1.Class1 Dim strRet As String = "" Try Call objCom.getDataForTest("1", strRet) Catch ex As Exception MsgBox(ex.Message) Finally MsgBox(strRet) ←←← 1が表示される  End Try End Sub =============================================================== =================== DLL呼び出し異常パターン =================== Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim objCom As New Project1.Class1 Dim strRet As String = "" Try Call objCom.getDataForTest("A", strRet) Catch ex As Exception MsgBox(ex.Message) Finally MsgBox(strRet) ←←← この時にAを表示したいがstrRetが空  End Try End Sub ===============================================================

  • VB2008で構造体を引数とした時にエラー

    VB2008の勉強を始めて数週間の初心者です。 勉強用にいろいろとプログラムを作っているのですが、 構造体(Structure)を引数で渡して戻り値を取得する Functionを作成してみました。 同一クラス内のPrivate Function の場合は問題ないのですいが、 追加した別クラスに Function を作成したところ 「 型 'TEST_A.Form1.str_IN' の値を 'TEST_A.Class1.str_IN' に変換できません。」 のエラーが表示されてしまいます。 別クラスのFunctionを使用する時、引数には構造体は指定できないのでしょうか? なにか文法上の誤りがあるのでしょうか? 初心者なので変な質問してたらスイマセン。 詳しい方がいらっしゃいましたらよろしくお願いします。 ------------------------------------------------------ Public Class Form1  Public Structure str_IN   Public in_aaa As String  End Structure  Private Sub Button1_Click(ByVal sender As System.Object,  ByVal e As System.EventArgs) ~   Dim stin As New str_IN   '------------------------------------   stin.in_aaa = "aaa"   Label1.Text = Test_Sub(stin) '<------- これはok   '-------------------------------------   Dim cls = New Class1   stin.in_aaa = "aaa"   Label1.Text = cls.CFnk(stin) '<----- エラーになる  End Sub  Private Function Test_Sub(ByVal prm_in As str_IN) As String   Dim stin As New str_IN   Dim sout As String   sout = "test_aaa"   Return sout  End Function End Class ------------------------------------------------------------ Public Class Class1 '新たに作成したクラス  Public Structure str_IN   Public in_aaa As String  End Structure  Public Function CFnk(ByVal prm_in As str_IN) As String   Dim stin As New str_IN   Dim sout As String   sout = "test_aaa"   Return sout  End Function End Class

  • グローバル変数などについて

    Option Explicit Dim str1 As String '・・・(1) Sub テスト() Dim str2 As String '・・・(2) str1 = "テスト1" str2 = "テスト2" MsgBox str1 MsgBox str2 End Sub (1)はグローバル変数と言うとの事ですが (2)は何変数と言うのでしょうか? ローカル変数ですか? また、(1)がdimではなく、 Public str1 As String となった場合でも、 プロシージャーの外にあれば、グローバル変数と言うのでしょうか?

  • 引数(配列)について

    呼ぶ側: Sub main()  Call func(test(),test_id) end Sub 呼ばれる側:  Private Sub func(Byref test() as string, Byval test_id as long) と言う関係がある場合で 引数(1)test() の値がなく渡したくない場合は、どのように記述すればいいのでしょうか? 引数(2)test_id の値がなく渡したくない場合は、0を渡しています  また、呼ぶ側で test() を宣言し、tast()=""を代入すれば問題ないことは分かっているのですが、test()の変数宣言せずに何とかなりませんでしょうか? 宜しくお願いいたします