この記事について
この記事は、生成AIを活用した自動生成フローで作成しています。Microsoft LearnのVBA参照設定・Officeセキュリティ資料と既存Daily-Code-Samplesを再確認し、参照切れを安全に一覧化する手順として整理しています。
検証ステータス:📘 公式情報確認済み・Excel実機未確認
VBAが別PCで突然コンパイルできなくなったときは、参照設定の MISSING を疑う価値があります。ThisWorkbook.VBProject.References を列挙し、IsBroken を見ると、壊れた参照をコードから切り分けられます。
まず動かす
この操作はVBAプロジェクトオブジェクトモデルへのアクセスを使います。組織PCではポリシーを優先し、設定変更を勝手に行わないでください。
Option Explicit
Public Sub CheckReferences()
Dim ref As Object
Dim brokenCount As Long
On Error GoTo AccessDenied
Debug.Print "[START] 参照設定を確認します"
For Each ref In ThisWorkbook.VBProject.References
If ref.IsBroken Then
brokenCount = brokenCount + 1
Debug.Print "[BROKEN]", "壊れた参照"
Else
Debug.Print "[OK]", ref.Name, ref.Major & "." & ref.Minor
End If
Next ref
Debug.Print "[RESULT] Broken=" & brokenCount
Exit Sub
AccessDenied:
Debug.Print "[FAILED]", Err.Number, Err.Description
End Sub
Officeのマクロ/VBAセキュリティ設定はMicrosoft Supportで確認できます。
ここを見る
イミディエイトウィンドウに [OK] と [BROKEN] を分けて表示します。Broken=0 なら壊れた参照は検出されていません。1件以上なら、参照設定画面と照合します。
flowchart TD
A[Referencesを列挙] --> B{IsBroken?}
B -- No --> C[Name / Versionを表示]
B -- Yes --> D[BROKENとして記録]
C --> E[次の参照]
D --> E
壊れた参照でFullPathを安易に読まない
壊れたReferenceではプロパティ取得自体が失敗する場合があります。既存の完全版サンプルでは、IsBroken=True の参照で FullPath を読まず、GUID取得も別関数で安全側に試します。
ReferenceのプロパティはOffice VBAの公式リファレンスで確認できます。
1か所変えてみる
正常参照についてだけ ref.FullPath を追加表示します。
If Not ref.IsBroken Then
Debug.Print ref.Name, ref.FullPath
End If
まず IsBroken 判定を残したまま表示項目を1つ増やすことで、壊れた参照に対して危険なプロパティアクセスを増やさずに観察できます。
参照切れが起きる理由
典型的には、別PCへ移したときのライブラリ差、Office/ActiveXコンポーネント差、ファイル参照先の欠落などがあります。参照が壊れると、本来無関係に見える標準関数付近でコンパイルエラーが出ることもあり、最初の切り分けとして一覧化が役立ちます。
仕事で使うなら
参照設定を自動で「修復」するところまで一気に進めない方が安全です。
まず読み取り・一覧化だけする
MISSINGを検出しても自動削除しない
複数候補から勝手に1つ選ばない
GUIDやバージョンを記録して原因を確認する
Officeの信頼設定を無断で緩めない
監査と修復を分けると、誤った参照へ付け替える事故を減らせます。
GitHubサンプル
完全版は正常参照のパス、壊れた参照の安全なGUID取得、アクセス拒否時の表示まで含みます。
公式情報・一次情報
まとめ
VBAの参照トラブルは、まず References と IsBroken を読み取って見える化すると切り分けやすくなります。自動修復より先に、どの参照が正常でどれが壊れているかを確認するのが安全です。
