【VBAエラー解説】実行時エラー1004「アプリケーション定義またはオブジェクト定義のエラー」の原因と解決方法

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 を使用する際は、対象のシートにグラフが存在しているかを事前にチェックすることで、安定した動作を実現できます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次