• ベストアンサー

気のせいでしょうか?

エクセルVBAで Module1にもModule2にも「Sub test()」がある場合 Module1のtestを実行しようとしたらエラーになったのですが 今も同じ状況ですがエラーになりません。 同じプロジェクト名に同じ名前のプロシージャーがあってもエラーになるのでしょうか? ならないのでしょうか? もしかしてエラーになった時は、 同じモジュール内に同じ名前のプロシージャー名を使ってたのでしょうか? Option Explicit を先頭に置いています。

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

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

同名のPublicなプロシージャが、複数の標準モジュールに登録されていた場合、 例えばModule1とModule2に、それぞれ「Test」というSubがあったとすると、  a)それらのモジュール内から「Test」を呼び出した場合:   →同じモジュール内の「Test」が呼び出される  b)上記以外(フォームモジュール/クラスモジュール/イミディエイト ウィンドウなど)から   呼び出した場合:   →「名前が適切ではありません」のエラーが発生 という結果になります。 「b」の場合で正しく「Test」を呼び出すには、呼び出す際に「Test」ではなく 「Module1.Test」「Module2.Test」と、(クラスのメソッドを呼び出すのと同様に) プロシージャの前にモジュール名をつけてやればOkです。 (こうすれば呼び出すことができるので、「Option Explicit」によるチェックで  弾かれる対象にはなりません) なお、Publicスコープの定数や変数を複数の標準モジュールで宣言している 場合も、同様の動作となります。

sdfaet
質問者

お礼

ありがとうございます。

その他の回答 (1)

  • okormazd
  • ベストアンサー率50% (1224/2412)
回答No.1

「気のせい」です。 「同じプロジェクト名に同じ名前のプロシージャー」があっても、ちがうmoduleにあればエラーになりません。 module1.test、module2.testのように区別します。 同じmoduleにあると、「コンパイルエラー:名前が適切ではありません:(名前)」になって実行ができません。

sdfaet
質問者

お礼

ありがとうございます。

関連するQ&A