プロが教える店舗&オフィスのセキュリティ対策術

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

STR = "STR"
TEST(STR)
Msgbox STR

Sub TEST(ByRef STR)
STR = "TEST"
End Sub

A 回答 (4件)

リファレンスのcallのところを参照してください。


call を省略した場合は、引数全体を囲む括弧も省略する必要があります。

TEST(STR) と書いたため、引数は STR という変数でなく、括弧に囲まれた (STR)という 式 と結びついたため、STR は変更されません。
まあ、実行時に「ByRefの引数に式を渡した」というエラーが出てしかるべきだとは思いますが。

ということで、
TEST STR
CALL TEST(STR)
のいずれかに修正。
    • good
    • 0
この回答へのお礼

> STR という変数でなく、括弧に囲まれた (STR)という 式 と結びついたため、STR は変更されません。

ほかの方の回答も参考にいろいろ試してみたのですが、VBSって文法にだいぶ癖があるみたいですね。
VBともまた感じが違うようなので今後はリファレンスの内容をしっかり確認しながら作成したいと思います。
回答ありがとうございました。

お礼日時:2006/03/15 23:09

こんばんは。



TEST(STR)
 ↓
TEST STR

で、括弧をつけなければ、ByRef をつけなくても、参照渡しになると思います。
    • good
    • 0
この回答へのお礼

> 括弧をつけなければ、ByRef をつけなくても、参照渡しになると思います。

これは・・・!
たしかにByRef要らないですね。
参考になります、回答ありがとうございました。

お礼日時:2006/03/15 23:07

Call TEST(STR)


として下さい
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/03/15 23:05

単純に Call がないからだと思います。


STR = "STR"
'TEST(STR)
Call TEST(STR) '←ここ
Msgbox STR

Sub TEST(ByRef STR)
STR = "TEST"
End Sub
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/03/15 23:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!