- ベストアンサー
【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 結果は同じですが、中身が違います。 今後コードを作っていく上で どちらの方式の方が良いのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 今後、どちらで作るというよりも、【1】と【2】は、目的によって違います。 ただ、圧倒的に、【1】の方が多いのは事実です。いわゆるサブルーチン化といいます。 【2】と比較すると、変数が壊れにくいので、安心して使えます。 【2】は、質問のコードの範囲内では、グローバル変数と呼べるかは別として、モジュール・レベルの変数としても、一度設定したら、その値を一定期間使い続けるようにして用います。 例えば、【2】は、URLコードを取得して、その後、そのURLを使いまわしするような場合に用います。しかしながら、Sub プロシージャ内で、エラーが発生しますと、せっかく、取得した変数の値も壊れてしまいますので、意外に、使い方には慎重を期することがあります。
その他の回答 (2)
- ap_2
- ベストアンサー率64% (70/109)
【1】は、MyStrが使えるのはtest2の中だけ。 【2】だと、どの関数からでもMyStrが使える。Book閉じるまで値を保持。 使用範囲・期間は限定できるよう、値の受け渡しは原則【1】で。 【2】のグローバル変数は、連続しない処理・・・ボタン押下1回目、2回目 とかで値を引き継ぐことも可能だけど、 そーいう理由がない限り、ゴミが残るし、可読性も下がる。 VBAはOption Explicit無しの人も多いから、グローバル変数は罠ダヨ。
お礼
変数の使える範囲や値を保持するかどうかが、変わってくるのですか。 このような情報が欲しかったです。 できるだけ【1】を使うようにします。ありがとうございました。
- K Kazz(@JazzCorp)
- ベストアンサー率31% (549/1751)
タイプも減ることだし、引数渡しでなくともイイのでは?
お礼
引数渡しとは、【1】の事でしょうか?
お礼
どうもありがとうございました。