【Excel VBA】マクロ実行時にコンパイルエラーが発生する原因と対処法

Excel
スポンサーリンク

今回は「コンパイルエラー:モジュールではなく、変数またはプロシージャを指定してください。」が出た時の原因と対処法を備忘録も兼ねて残しておきたいと思います。

スポンサーリンク

どういった症状か

マクロを実行すると、「コンパイルエラー:モジュールではなく、変数またはプロシージャを指定してください。」というエラーが発生しています。

どういった症状か_1

コードを確認すると、プロシージャ名の所で停まっています。

どういった症状か_2
スポンサーリンク

原因

原因は標準モジュールのオブジェクト名定数が同じ場合に発生します。

一体どういうことか先程の例を用いて説明すると、このプロシージャが記入してある標準モジュールのオブジェクト名が「VbYesNo」になっています。

原因_1

そしてプロシージャ内では以下のコードを記入しています。

If MsgBox("どうしますか?", VbYesNo, "はりぼな") = vbYes Then

End If

コードを見てみると、Msgboxの引数に「VbYesNo」があるのが分かるかと思います。これはMsgbox関数の定数予め用意されている値になります。そして標準モジュールのオブジェクト名と重複しています

このようにオブジェクト名と引数の定数が重複していると「オブジェクト名を指定してるのか定数を指定してるか分からん!」となってしまい、エラーになってしまうわけです。

スポンサーリンク

対処法

対処法としては、オブジェクト名が引数と重複しないように名前を変更することです。先程の例で言うとオブジェクト名を「VbYesNo」以外に変更すればマクロが動くようになります。

対処法_1

試しにオブジェクト名を「VbYesNo」→「VbYesNo_Macro」に変更して再度マクロを実行してみます。

対処法_2

このように、変更後は問題なくマクロが実行できているのが確認できます。

まとめ

今回は「コンパイルエラー:モジュールではなく、変数またはプロシージャを指定してください。」が出た時の原因と対処法を紹介しました。

このエラーが発生している時は、モジュール名と定数が重複していないか確認してみましょう。

また、今回のようにPC・Excel関係のトラブルについての記事を不定期で投稿していますので、是非参考にしていただければ幸いです!

コメント

タイトルとURLをコピーしました