• ベストアンサー

標準モジュールにpublicで宣言するしかない?

フォームモジュールと標準モジュールで同じ変数を使って値を行き来したい場合、 標準モジュールにpublicで宣言するしかないのでしょうか? 【フォームモジュール】 Private Sub cmd_コマンド0_Click() test = "aaa" Call 標準モジュールtest End Sub 【標準モジュール】 Public test As String Sub 標準モジュールtest() MsgBox test End Sub でいいのですか?

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

> 標準モジュールにpublicで宣言するしかないのでしょうか? 例えば、「自身のPath」のように実行後の変動がないものや、 「ファイルのプロパティ」のように呼出元によらず共通になるもの などは、「標準モジュールにPublicで宣言」でいいと思いますが、 「ある処理の開始時間と終了時間」のように【都度変化する 値】のような場合は「SubやFunctionの引数として渡す」という 方法を採った方がよいかと思います。 (そうした方が、「うっかり古いままの値を使用してしまった」と  いった失敗を防げる、と) この場合、「フォームモジュールのSubの中」と「Subの引数」の 2箇所で、同じ値を受け取る変数を宣言することになります。 (もしくは、下で「または~」としたように、フォームモジュール側での  変数宣言はせずに、引数に直接記述) 【フォームモジュール】 Private Sub cmd_コマンド0_Click()   Dim test As String   test = "aaa"   Call 標準モジュールtest(test)   'または、変数「test」は宣言せずに文字列を引数に直接記述   'Call 標準モジュールtest("aaa") End Sub 【標準モジュール】 Sub 標準モジュールtest(test As String)   MsgBox test End Sub

goyzrsjh
質問者

お礼

ご回答ありがとうございます。