VBAを実行すると実行時エラー’1004’を見る機会はありませんか?
コードをみても誤った箇所がわからず途方に暮れる場合もあるかと思います。
そんな中で悩むことは、
・VBA 実行時エラー’1004’の対処はどうすればよい?
ですよね。
今回は、
についてまとめます!
もくじ
VBA 実行時エラー’1004’はどんなエラー?
「実行時エラー‘1004’」はVBA実行中に初声うするエラーで、主に、指定したファイルが見つからなかったり、セルなど参照先がなかったりなど、指定先の入力ミスなどで起こります。
それでは、エラー発生原因と対策について順に説明していきます!
VBA エラー 1004の原因①「既に開いているブックと同じ名前のブックを開こうとしたとき」
あるExcelブックをWクリックして開きます。
次に、開いたExcelブック名を相対参照で指定し、Openメソッドで開こうとするとエラーが発生ます。
サンプルコードです。
Sub エラーテスト1()
Dim ObjTest As Object
Set ObjTest = Workbooks.Open("\\既に開いているExcelブック.xlsx")
End Sub
エラー「実行時エラー’1004’ ファイルにアクセスできません。」がでましたね。
なお、フルパス指定の場合は同様の条件であってもエラーは発生しません。
VBA エラー 1004の原因①「既に開いているブックと同じ名前のブックを開こうとしたとき」の対処方法は既に開いているExcelブックを閉じるか、別のブック名を指定
既に開いているExcelブックを閉じるか、別のブック名を指定するようにしましょう。
VBA エラー 1004の原因②「ファイル名またはパスが存在しない」
存在しないファイル名やパスを指定した際にエラーが発生します。
サンプルコードです。
Sub エラーテスト2()
Dim ObjTest As Object
Set ObjTest = Workbooks.Open("C:\存在しないExcelブック.xlsx")
End Sub
エラー「実行時エラー’1004’ ***が見つかりません。名前が変更されたか、移動や削除が行われた可能性があります」がでましたね。
VBA エラー 1004の原因②「ファイル名またはパスが存在しない」の対処方法は存在するファイル名、パスを指定する
存在するファイル名、パスを指定するようにしましょう。
VBA エラー 1004の原因③「既に存在するシート名を新規シート名にする場合」
既に存在するシート名を新規シート名にする場合にエラーが発生ます。
追加したシート名を存在しているシート名に変えてみます。
サンプルコードです。
設定とは異なる選択範囲名を指定します。
Sub エラーテスト3()
ActiveSheet.Name = "存在しているシート"
End Sub
エラー「この名前は既に使用されています。別の名前を入力してください。」がでましたね。
VBA エラー 1004の原因③「既に存在するシート名を新規シート名にする場合」の対処方法は既存シート名とは別のシート名を指定する
既存シート名とは別のシート名を指定するようにしましょう。
VBA エラー 1004の原因④「存在しない名前付き範囲を指定した場合」
存在しない名前付き範囲を指定した場合にエラーが発生します。
選択範囲名を”選択範囲1″で設定します。
サンプルコードです。
設定とは異なる選択範囲名を指定します。
Sub エラーテスト4()
ActiveSheet.Range("存在しない選択範囲").Select
End Sub
エラー「アプリケーション定義またはオブジェクト定義のエラーです。」がでましたね。
さらにVBA 実行時エラー’1004’「アプリケーション定義またはオブジェクト定義のエラーです」の原因について細分化して4パターンに分類し説明をしていますので、こちらもご参照ください。
VBA エラー 1004の原因④「存在しない名前付き範囲を指定した場合」の対処方法は存在する名前付き範囲を指定する
存在する名前付き範囲を指定しましょう。
サンプルコードです。
設定した選択範囲名を指定します。
Sub エラーテスト4()
ActiveSheet.Range("選択範囲1").Select
End Sub
VBA エラー 1004の原因⑤「アクティブでないシートの範囲を指定した場合」
アクティブでないシートの範囲を指定した場合にエラーが発生します。
“存在しているシート”の範囲を指定したいときに、別のシートを参照している状態で以下を実行します。
サンプルコードです。
Sub エラーテスト5()
Worksheets("存在しているシート").Range("A1:B2").Select
End Sub
エラー「RangeクラスのSelectメソッドが失敗しました。」がでましたね。
VBA エラー 1004の原因⑤「アクティブでないシートの範囲を指定した場合」の対処方法はアクティブにしてから実行する
対象のシートをアクティブにしてから範囲を指定するようにしましょう。
サンプルコードです。
範囲選択の前に、対象シートをセレクトするようにしました。
Sub エラーテスト5()
Worksheets("存在しているシート").Select
Worksheets("存在しているシート").Range("A1:B2").Select
End Sub
問題ないですね。
VBA エラー 1004の原因⑥「結合したシートに対して誤った範囲指定で編集しようとした場合」
結合したシートに対して誤った範囲指定で編集しようとした場合にエラーが発生します。
サンプルでは選択範囲”A1:B2″の値をコピーし、
結合セルを含む”A5:B6″へコピーする内容です。
サンプルコードです。
Sub エラーテスト6()
Worksheets("存在しているシート").Select
Worksheets("存在しているシート").Range("A1:B2").Copy
Worksheets("存在しているシート").Range("A5:B6").PasteSpecial
End Sub
エラー「この操作は結合したセルには行えません。」がでましたね。
VBA エラー 1004の原因⑥「結合したシートに対して誤った範囲指定で編集しようとした場合」の対処方法はセルの範囲の整合性をとる
結合を含むセルの編集を行う場合は、セルの範囲指定を結合セルを考慮した内容にしましょう。
上記のコピー&ペーストの例ですと、
コピー元をコピー先と同じようにセルを結合させ、その範囲に訂正するか、
コピー先のセルの結合を解除するようにします。
さいごに
今回は、
についてまとめました。
VBAのエラーはパターンを知っておくと発生した時に慌てず対応することができますので、
しっかりと対処方法を把握するようにしておきたいですね!
コメントを残す