- ベストアンサー
VBSの関数で複数の値を返したい
関数から2つの値を返したいと思っています。 ByRefで以下のようにすれば変数STRの内容を書き換えられると思ったのですが、エラーにはならないものの値は変わらないようです。 このような使い方はできないのでしょうか? STR = "STR" TEST(STR) Msgbox STR Sub TEST(ByRef STR) STR = "TEST" End Sub
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
リファレンスのcallのところを参照してください。 call を省略した場合は、引数全体を囲む括弧も省略する必要があります。 TEST(STR) と書いたため、引数は STR という変数でなく、括弧に囲まれた (STR)という 式 と結びついたため、STR は変更されません。 まあ、実行時に「ByRefの引数に式を渡した」というエラーが出てしかるべきだとは思いますが。 ということで、 TEST STR CALL TEST(STR) のいずれかに修正。
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 TEST(STR) ↓ TEST STR で、括弧をつけなければ、ByRef をつけなくても、参照渡しになると思います。
お礼
> 括弧をつけなければ、ByRef をつけなくても、参照渡しになると思います。 これは・・・! たしかにByRef要らないですね。 参考になります、回答ありがとうございました。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
Call TEST(STR) として下さい
お礼
回答ありがとうございます。 参考にさせていただきます。
- asobe
- ベストアンサー率76% (10/13)
単純に Call がないからだと思います。 STR = "STR" 'TEST(STR) Call TEST(STR) '←ここ Msgbox STR Sub TEST(ByRef STR) STR = "TEST" End Sub
お礼
一番の回答ありがとうございます。 参考にさせていただきます。
お礼
> STR という変数でなく、括弧に囲まれた (STR)という 式 と結びついたため、STR は変更されません。 ほかの方の回答も参考にいろいろ試してみたのですが、VBSって文法にだいぶ癖があるみたいですね。 VBともまた感じが違うようなので今後はリファレンスの内容をしっかり確認しながら作成したいと思います。 回答ありがとうございました。