更新日:、 作成日:
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 ' インデックス
公式のドキュメントに「エラー メッセージ」の一覧があるので、その番号を参考にします。