更新日:、 作成日:

VBA エラー 1004 アプリケーション定義またはオブジェクト定義のエラーです。

はじめに

Excel VBA マクロのエラー 1004 「アプリケーション定義またはオブジェクト定義のエラーです。」の対処法を紹介します。同じメッセージで番号が違うことがあります。

VBA が想定していない原因不明のエラーが発生したときに発生します。

Err.Raise メソッドで定義されていないエラー番号を指定したときに発生します。

エラーの基本的な対処法は、エラー箇所の特定とその原因となったコードをデバッグします。

デバッグについては「デバッグの仕方」をご覧ください。
エラー処理については「エラー処理をする」をご覧ください。

解決する

VBA で想定しているエラーはあらかじめ定義されています。その種類に応じて番号が設定されています。その定義しているエラーと一致しないエラーが発生したときに、このエラーが発生します。

つまり、原因不明のエラーということです。

例えば、アクティブでないシートに対して Range.Select メソッドを使用すると発生します。メソッドや関数には、それを使用できる条件が存在することがあります。それを満たしていないと発生します。

Sheets(1).Activate
Sheets(2).Range("A1").Select ' エラー

Sheets(2).Activate
Sheets(2).Range("A1").Select ' OK

何が原因でそのエラーが発生したのかは、そのヘルプを参照するしかありません。しかし、そこまで詳しく記載されていないため原因を特定できません。

そのため引数に問題がないか、オブジェクトに問題がないかなど、正常に動作するときとしないときの違いなどを確認しながら、1 つずつデバッグするしかありません。

定義されているエラー番号を指定する

Err.Raise メソッドや Error ステートメントで、VBA で定義されていないエラー番号を指定したときに発生します。

Err.Raise (513) ' エラー
Err.Raise (6)   ' オーバーフロー

Error 514 ' エラー
Error 9   ' インデックス

公式のドキュメントに「エラー メッセージ」の一覧があるので、その番号を参考にします。

著者:Tipsfound