今回は「コンパイルエラー:モジュールではなく、変数またはプロシージャを指定してください。」が出た時の原因と対処法を備忘録も兼ねて残しておきたいと思います。
どういった症状か
マクロを実行すると、「コンパイルエラー:モジュールではなく、変数またはプロシージャを指定してください。」というエラーが発生しています。
コードを確認すると、プロシージャ名の所で停まっています。
原因
原因は標準モジュールのオブジェクト名と定数が同じ場合に発生します。
一体どういうことか先程の例を用いて説明すると、このプロシージャが記入してある標準モジュールのオブジェクト名が「VbYesNo」になっています。
そしてプロシージャ内では以下のコードを記入しています。
If MsgBox("どうしますか?", VbYesNo, "はりぼな") = vbYes Then
End If
コードを見てみると、Msgboxの引数に「VbYesNo」があるのが分かるかと思います。これはMsgbox関数の定数(予め用意されている値)になります。そして標準モジュールのオブジェクト名と重複しています。
このようにオブジェクト名と引数の定数が重複していると「オブジェクト名を指定してるのか定数を指定してるか分からん!」となってしまい、エラーになってしまうわけです。
対処法
対処法としては、オブジェクト名が引数と重複しないように名前を変更することです。先程の例で言うとオブジェクト名を「VbYesNo」以外に変更すればマクロが動くようになります。
試しにオブジェクト名を「VbYesNo」→「VbYesNo_Macro」に変更して再度マクロを実行してみます。
このように、変更後は問題なくマクロが実行できているのが確認できます。
まとめ
今回は「コンパイルエラー:モジュールではなく、変数またはプロシージャを指定してください。」が出た時の原因と対処法を紹介しました。
このエラーが発生している時は、モジュール名と定数が重複していないか確認してみましょう。
また、今回のようにPC・Excel関係のトラブルについての記事を不定期で投稿していますので、是非参考にしていただければ幸いです!
コメント