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

Microsoftの公式ドキュメントによれば、このエラーは「コードがこのアプリケーションのバージョンまたはアーキテクチャと互換性がない場合」に発生します(Microsoft Learn「非表示モジュール内でコンパイルエラーが発生しました」)。
モジュールが保護(非表示)されているため、具体的なエラー箇所が画面に表示されないのが厄介な点です。
エラーメッセージにはいくつかバリエーションがあります。
| メッセージのサフィックス | 主な原因 |
|---|---|
| AutoExec | Wordのアドインテンプレート(.dot/.dotm)の問題 |
| AutoExecNew | Adobe PDF Makerアドインの競合 |
| DistMon | Adobe PDF Makerアドインの競合 |
| モジュール名(任意) | VBAコードの32bit/64bit非互換 |
原因① 32bit版コードを64bit版Officeで実行している(最も多い)
Office 2019以降、デフォルトのインストールが64bit版に変わりました。
それ以前に作られたVBAコードには32bit専用の書き方(Declareステートメント)が含まれていることがあり、64bit版Officeでは動作しません。
確認方法
使用中のOfficeが何bit版かを確認します。
- ExcelまたはWordを起動します
- 「ファイル」→「アカウント」→「Excelのバージョン情報」をクリックします
- 表示されたダイアログに「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の移行後に起きやすいトラブルです。
対処法
- ExcelまたはWordを開きます(エラーが出てもOKをクリックして続行)
- Alt + F11 キーでVBAエディターを開きます
- メニューの「ツール」→「参照設定」をクリックします
- 一覧の中に「参照不可: ○○○」と表示されている項目があればチェックを外します
- 「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アドインが原因でエラーが発生する場合があります。
対処法
- ExcelまたはWordを起動します
- 「ファイル」→「オプション」→「アドイン」をクリックします
- 下部の「管理」プルダウンを「COMアドイン」に切り替え、「設定」をクリックします
- 一覧に表示されているアドインのチェックをすべて外します
- Officeを再起動してエラーが消えるか確認します
- エラーが消えた場合、アドインを1つずつ有効に戻して原因を特定します
原因⑤ .exdキャッシュファイルが破損している
ActiveXコントロールのキャッシュファイル(拡張子.exd)が古くなっていると、コンパイルエラーの原因になることがあります。
対処法
- ExcelとWordをすべて閉じます
- エクスプローラーを開き、以下のフォルダを確認します
C:\Users\[ユーザー名]\AppData\Local\Temp\Excel8.0\
C:\Users\[ユーザー名]\AppData\Local\Temp\VBE\
- 拡張子が
.exdのファイルをすべて削除します - Excelを再起動します
AppDataフォルダは非表示になっている場合があります。
エクスプローラーの「表示」→「隠しファイル」を有効にしてから探してください。
上記で解決しない場合:Officeの修復インストール
ここまでの方法で解決しない場合は、Officeのインストール自体が破損している可能性があります。
- 「スタート」→「設定」→「アプリ」をクリックします
- 「Microsoft Office」または「Microsoft 365」を選択します
- 「変更」→「クイック修復」を実行します
- クイック修復で改善しない場合は「オンライン修復」を実行します
Office起動トラブル全般の対処法はMicrosoft 365が開かない!起動しない時の原因と10の対処法|ちょげぶろぐもあわせてご覧ください。
対処法の優先順位まとめ
状況に応じて試す順番の目安を整理します。
- 参照設定の「参照不可」を外す(最も手軽で効果が高い)
- COMアドインをすべて無効にする(アドイン起因の場合)
- .exdファイルを削除する(ActiveX関連の場合)
- AdobeアドインのPDFMakerファイルを削除する(AutoExecNew/DistMonの場合)
- VBAコードにPtrSafeを追加する(32bit/64bit非互換の場合)
- Officeを修復インストールする(上記で解決しない場合)
まとめ
「非表示モジュール内でコンパイルエラーが発生しました」は、VBAコードとOfficeバージョンの互換性の問題や、アドイン・参照設定の不整合が主な原因です。
まずは参照設定の「参照不可」チェックとCOMアドインの無効化を試してみてください。
エラーメッセージのサフィックス(AutoExecNew・DistMonなど)に注目すると、原因を絞り込みやすくなります。
VBAの基礎や編集方法についてはExcelのマクロを編集するには?初心者でも失敗しない基本とコツ|ちょげぶろぐを参考にしてください。
参考情報源:


コメント