VBAでマクロを実行しているときに突然表示される「実行時エラー ‘1004’:アプリケーション定義またはオブジェクト定義のエラー」。
このエラーは非常に汎用的であるため、初心者の方だけでなく中級者以上の方でも原因の特定に悩まされることが多いものです。
本記事では、特に ChartObjects.Delete
の行で発生するこのエラーに焦点を当てて、エラーの意味・よくある原因・解決方法を丁寧にご説明いたします。
エラーの意味:「アプリケーション定義またはオブジェクト定義のエラー」とは?
このエラーは、VBAが実行しようとした処理が、Excelアプリケーションまたは対象のオブジェクトの状態に合致していない場合に発生します。
つまり、「この操作は現在の状況では実行できません」とExcelが判断したときに発生します。
よくある原因(ChartObjects.Delete 編)
以下のようなコードでよく見られます。
wsDst.ChartObjects.Delete
このコードは、ワークシート上にあるすべてのグラフ(ChartObject)を削除しようとしていますが、以下のような状態だとエラーが発生することがあります。
主な原因一覧:
原因 | 説明 |
---|---|
グラフが1つも存在しない | ChartObjects.Count = 0 のときに .Delete を実行するとエラーになることがある |
ワークシートが非表示・保護されている | 対象シートが保護状態にあるとオブジェクトの削除が拒否される |
ChartObjects の参照が正しくない | wsDst が無効、または誤って別の型(例:グラフ以外)を指している |
グラフが埋め込み型ではなく、独立した「グラフシート」である | ChartObjects は埋め込みグラフのみを扱います |
解決方法
方法①:グラフが存在するか確認してから削除する
If wsDst.ChartObjects.Count > 0 Then
wsDst.ChartObjects.Delete
End If
このように、存在を確認してから削除処理を行うことで、エラーを未然に防ぐことができます。
方法②:シートの保護や非表示を解除する
削除対象のシートが保護されていないか、非表示になっていないかを確認します。
wsDst.Visible = xlSheetVisible
wsDst.Unprotect
方法③:グラフの種類に注意する
独立した「グラフシート(Chart)」は ChartObjects
では操作できません。埋め込みグラフだけが対象である点に注意が必要です。
まとめ
「実行時エラー 1004」は、非常に多くの原因で発生する可能性があるため、冷静にエラー発生行の処理対象と状態を確認することが最も重要です。
特に ChartObjects.Delete
を使用する際は、対象のシートにグラフが存在しているかを事前にチェックすることで、安定した動作を実現できます。