プロが教えるわが家の防犯対策術!

【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

結果は同じですが、中身が違います。
今後コードを作っていく上で
どちらの方式の方が良いのでしょうか?

A 回答 (3件)

こんにちは。



今後、どちらで作るというよりも、【1】と【2】は、目的によって違います。
ただ、圧倒的に、【1】の方が多いのは事実です。いわゆるサブルーチン化といいます。
【2】と比較すると、変数が壊れにくいので、安心して使えます。

【2】は、質問のコードの範囲内では、グローバル変数と呼べるかは別として、モジュール・レベルの変数としても、一度設定したら、その値を一定期間使い続けるようにして用います。

例えば、【2】は、URLコードを取得して、その後、そのURLを使いまわしするような場合に用います。しかしながら、Sub プロシージャ内で、エラーが発生しますと、せっかく、取得した変数の値も壊れてしまいますので、意外に、使い方には慎重を期することがあります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2013/01/01 11:19

【1】は、MyStrが使えるのはtest2の中だけ。


【2】だと、どの関数からでもMyStrが使える。Book閉じるまで値を保持。

使用範囲・期間は限定できるよう、値の受け渡しは原則【1】で。

【2】のグローバル変数は、連続しない処理・・・ボタン押下1回目、2回目
とかで値を引き継ぐことも可能だけど、
そーいう理由がない限り、ゴミが残るし、可読性も下がる。
VBAはOption Explicit無しの人も多いから、グローバル変数は罠ダヨ。
    • good
    • 0
この回答へのお礼

変数の使える範囲や値を保持するかどうかが、変わってくるのですか。
このような情報が欲しかったです。
できるだけ【1】を使うようにします。ありがとうございました。

お礼日時:2012/12/27 19:59

タイプも減ることだし、引数渡しでなくともイイのでは?

    • good
    • 0
この回答へのお礼

引数渡しとは、【1】の事でしょうか?

お礼日時:2012/12/27 19:59

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