• ベストアンサー

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

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

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.4

リファレンスのcallのところを参照してください。 call を省略した場合は、引数全体を囲む括弧も省略する必要があります。 TEST(STR) と書いたため、引数は STR という変数でなく、括弧に囲まれた (STR)という 式 と結びついたため、STR は変更されません。 まあ、実行時に「ByRefの引数に式を渡した」というエラーが出てしかるべきだとは思いますが。 ということで、 TEST STR CALL TEST(STR) のいずれかに修正。

K6A
質問者

お礼

> STR という変数でなく、括弧に囲まれた (STR)という 式 と結びついたため、STR は変更されません。 ほかの方の回答も参考にいろいろ試してみたのですが、VBSって文法にだいぶ癖があるみたいですね。 VBともまた感じが違うようなので今後はリファレンスの内容をしっかり確認しながら作成したいと思います。 回答ありがとうございました。

その他の回答 (3)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんばんは。 TEST(STR)  ↓ TEST STR で、括弧をつけなければ、ByRef をつけなくても、参照渡しになると思います。

K6A
質問者

お礼

> 括弧をつけなければ、ByRef をつけなくても、参照渡しになると思います。 これは・・・! たしかにByRef要らないですね。 参考になります、回答ありがとうございました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

Call TEST(STR) として下さい

K6A
質問者

お礼

回答ありがとうございます。 参考にさせていただきます。

  • asobe
  • ベストアンサー率76% (10/13)
回答No.1

単純に Call がないからだと思います。 STR = "STR" 'TEST(STR) Call TEST(STR) '←ここ Msgbox STR Sub TEST(ByRef STR) STR = "TEST" End Sub

K6A
質問者

お礼

一番の回答ありがとうございます。 参考にさせていただきます。

関連するQ&A