「非表示モジュール内でコンパイルエラーが発生しました」の原因と対処法【Excel・Word】

microsoft

ExcelやWordを開いたときに突然表示される「非表示モジュール内でコンパイルエラーが発生しました」というメッセージ。
「何もしていないのにエラーが出る」「マクロが動かなくなった」と困っている方は多いでしょう。
このエラーはVBA(マクロ)コードの互換性の問題が原因で発生します。
この記事では、エラーの原因を種類別に整理し、パターンに合った対処法を順番に解説します。


スポンサーリンク

このエラーが出る状況とメッセージの種類

Microsoftの公式ドキュメントによれば、このエラーは「コードがこのアプリケーションのバージョンまたはアーキテクチャと互換性がない場合」に発生します(Microsoft Learn「非表示モジュール内でコンパイルエラーが発生しました」)。

モジュールが保護(非表示)されているため、具体的なエラー箇所が画面に表示されないのが厄介な点です。

エラーメッセージにはいくつかバリエーションがあります。

メッセージのサフィックス主な原因
AutoExecWordのアドインテンプレート(.dot/.dotm)の問題
AutoExecNewAdobe PDF Makerアドインの競合
DistMonAdobe PDF Makerアドインの競合
モジュール名(任意)VBAコードの32bit/64bit非互換

原因① 32bit版コードを64bit版Officeで実行している(最も多い)

Office 2019以降、デフォルトのインストールが64bit版に変わりました。
それ以前に作られたVBAコードには32bit専用の書き方(Declareステートメント)が含まれていることがあり、64bit版Officeでは動作しません。

確認方法

使用中のOfficeが何bit版かを確認します。

  1. ExcelまたはWordを起動します
  2. ファイル」→「アカウント」→「Excelのバージョン情報」をクリックします
  3. 表示されたダイアログに「64ビット」または「32ビット」と記載されています

32bitと64bitの違いについてはOfficeClientEditionとは?32ビット・64ビット版の確認と設定完全ガイド|ちょげぶろぐで詳しく解説しています。

対処法(VBAコードを修正できる場合)

VBAエディター(Alt + F11)を開き、Declareステートメントを含むコードにPtrSafeを追加します。

修正前:

Declare Function GetUserName Lib "advapi32.dll" (ByVal lpBuffer As String, nSize As Long) As Long

修正後:

Declare PtrSafe Function GetUserName Lib "advapi32.dll" (ByVal lpBuffer As String, nSize As Long) As Long

VBAコードにアクセスできない(保護されている)場合は、ファイルの作成者に修正を依頼する必要があります。


原因② 参照設定に「参照不可」のライブラリがある

VBAプロジェクトが参照するライブラリが見つからない場合、「参照不可」と表示されたままになり、コンパイルエラーの原因になります。
OfficeのバージョンアップやPCの移行後に起きやすいトラブルです。

対処法

  1. ExcelまたはWordを開きます(エラーが出てもOKをクリックして続行)
  2. Alt + F11 キーでVBAエディターを開きます
  3. メニューの「ツール」→「参照設定」をクリックします
  4. 一覧の中に「参照不可: ○○○」と表示されている項目があればチェックを外します
  5. OK」をクリックして保存します

この操作でエラーが解消するケースが多いです。


原因③ Adobeアドインのテンプレートファイルが競合している(AutoExecNew / DistMon)

エラーメッセージが「AutoExecNew」または「DistMon」の場合、Adobe Acrobat(PDF作成ソフト)のアドインファイルが原因です。
ExcelやWordのスタートアップフォルダに古いテンプレートファイルが残っていることで発生します。

対処法

以下のフォルダを開き、PDFMaker.xla(Excelの場合)またはPDFMaker.dot(Wordの場合)が存在していれば削除またはフォルダ外に移動します。

Excelのスタートアップフォルダ(一般的な場所):

C:\Program Files\Microsoft Office\Office16\XLSTART\

ファイルを削除したくない場合は、拡張子を.bakなどに変更してもかまいません。


原因④ COMアドインが競合している

ExcelやWordに登録されているCOMアドインが原因でエラーが発生する場合があります。

対処法

  1. ExcelまたはWordを起動します
  2. ファイル」→「オプション」→「アドイン」をクリックします
  3. 下部の「管理」プルダウンを「COMアドイン」に切り替え、「設定」をクリックします
  4. 一覧に表示されているアドインのチェックをすべて外します
  5. Officeを再起動してエラーが消えるか確認します
  6. エラーが消えた場合、アドインを1つずつ有効に戻して原因を特定します

原因⑤ .exdキャッシュファイルが破損している

ActiveXコントロールのキャッシュファイル(拡張子.exd)が古くなっていると、コンパイルエラーの原因になることがあります。

対処法

  1. ExcelとWordをすべて閉じます
  2. エクスプローラーを開き、以下のフォルダを確認します
C:\Users\[ユーザー名]\AppData\Local\Temp\Excel8.0\
C:\Users\[ユーザー名]\AppData\Local\Temp\VBE\
  1. 拡張子が.exdのファイルをすべて削除します
  2. Excelを再起動します

AppDataフォルダは非表示になっている場合があります。
エクスプローラーの「表示」→「隠しファイル」を有効にしてから探してください。


上記で解決しない場合:Officeの修復インストール

ここまでの方法で解決しない場合は、Officeのインストール自体が破損している可能性があります。

  1. スタート」→「設定」→「アプリ」をクリックします
  2. Microsoft Office」または「Microsoft 365」を選択します
  3. 変更」→「クイック修復」を実行します
  4. クイック修復で改善しない場合は「オンライン修復」を実行します

Office起動トラブル全般の対処法はMicrosoft 365が開かない!起動しない時の原因と10の対処法|ちょげぶろぐもあわせてご覧ください。


対処法の優先順位まとめ

状況に応じて試す順番の目安を整理します。

  1. 参照設定の「参照不可」を外す(最も手軽で効果が高い)
  2. COMアドインをすべて無効にする(アドイン起因の場合)
  3. .exdファイルを削除する(ActiveX関連の場合)
  4. AdobeアドインのPDFMakerファイルを削除する(AutoExecNew/DistMonの場合)
  5. VBAコードにPtrSafeを追加する(32bit/64bit非互換の場合)
  6. Officeを修復インストールする(上記で解決しない場合)

まとめ

「非表示モジュール内でコンパイルエラーが発生しました」は、VBAコードとOfficeバージョンの互換性の問題や、アドイン・参照設定の不整合が主な原因です。
まずは参照設定の「参照不可」チェックとCOMアドインの無効化を試してみてください。
エラーメッセージのサフィックス(AutoExecNew・DistMonなど)に注目すると、原因を絞り込みやすくなります。

VBAの基礎や編集方法についてはExcelのマクロを編集するには?初心者でも失敗しない基本とコツ|ちょげぶろぐを参考にしてください。


参考情報源:

コメント

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