• ベストアンサー

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

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

  • ベストアンサー
回答No.3

こんにちは。 今後、どちらで作るというよりも、【1】と【2】は、目的によって違います。 ただ、圧倒的に、【1】の方が多いのは事実です。いわゆるサブルーチン化といいます。 【2】と比較すると、変数が壊れにくいので、安心して使えます。 【2】は、質問のコードの範囲内では、グローバル変数と呼べるかは別として、モジュール・レベルの変数としても、一度設定したら、その値を一定期間使い続けるようにして用います。 例えば、【2】は、URLコードを取得して、その後、そのURLを使いまわしするような場合に用います。しかしながら、Sub プロシージャ内で、エラーが発生しますと、せっかく、取得した変数の値も壊れてしまいますので、意外に、使い方には慎重を期することがあります。

AXWNPWQTPCI
質問者

お礼

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

その他の回答 (2)

  • ap_2
  • ベストアンサー率64% (70/109)
回答No.2

【1】は、MyStrが使えるのはtest2の中だけ。 【2】だと、どの関数からでもMyStrが使える。Book閉じるまで値を保持。 使用範囲・期間は限定できるよう、値の受け渡しは原則【1】で。 【2】のグローバル変数は、連続しない処理・・・ボタン押下1回目、2回目 とかで値を引き継ぐことも可能だけど、 そーいう理由がない限り、ゴミが残るし、可読性も下がる。 VBAはOption Explicit無しの人も多いから、グローバル変数は罠ダヨ。

AXWNPWQTPCI
質問者

お礼

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

回答No.1

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

AXWNPWQTPCI
質問者

お礼

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

関連するQ&A