• ベストアンサー

VBAでのファイル読込エラーの対応方法

VBAについては、かなり素人です。 エクセルのメインシートからバックグラウンドで任意のファイルを次のようなVBAで読み込んでいます。 次の場合では、存在しないファイル名等をセットすると「ファイル読込エラー」になります。「存在しないファイルが指定されています」等を表示し、Open命令では、ストップしないようにするには、どう記述すればいか教示願います。 PathName:任意のパス名   CarentFile:任意のファイル名  Application.ScreenUpdating = False Set ObjBook = Workbooks.Open(Filename:=PathName & "\" & CarentFile)

質問者が選んだベストアンサー

  • ベストアンサー
  • matsu_jun
  • ベストアンサー率55% (146/265)
回答No.3

Set ObjBook = Workbooks.Open(Filename:=PathName & "\" & CarentFile) の上下に、以下のように書き込んで下さい。 On Error Resume Next 'エラーがあっても続行する Set ObjBook = Workbooks.Open(Filename:=PathName & "\" & CarentFile) If Err.Number <> 0 Then 'エラーがあったら実行する   MsgBox Error(Err.Number) 'エラー番号に相当するメッセージを表示   Exit Sub 'マクロの実行を終了する End If

kmasumi
質問者

お礼

ありがとうございます。 On Error Resume Next Set ObjBook = Workbooks.Open(Filename・・・ If Err.Number <> 0 Then "無視したファイルをあるセルに表示" Exit Sub 以上のようにすることで、有効ファイルのみを読むことが できるようになりました。

その他の回答 (3)

回答No.4

No2.の方のやり方で良いんですが、もし、他でエラーが発生した時、原因不明になり訳が分からなくなると思いますので、以下のようにした方が良いかと思います。 On Error GoTo エラー処理 'エラーの場合 ラベル エラー処理: 以下を実行する。 Set ObjBook = Workbooks.Open(Filename:="D:\work\test.xls") On Error GoTo 0 'これ以降で、エラーが起きた場合、停止する。 ' 続きの処理 Exit Sub エラー処理: If Err = 1004 Then   MsgBox ("存在しないファイルが指定されています")   Resume Next Else   MsgBox ("ファイル読み込みエラー以外のエラーです。")   Exit Sub End If ファイルの読み込みの部分だけ、On Error GoTo エラー処理 で、エラー処理をして、ファイル読み込みを終わったら、エラー処理に行かないようにする。 「エラー処理:」 等のラベルは、漢字のままでも大丈夫です。「:」は、半角です。また、「エラー処理:」の前の行には、Exit Subを、入れておかないと、続きの処理を終わった後、エラー処理の部分を実行してしまいます。

kmasumi
質問者

お礼

ありがとうございました。もっと高度なことができるようになったら、使おうと思います。

  • matsu_jun
  • ベストアンサー率55% (146/265)
回答No.2

Set ObjBook = Workbooks.Open(Filename:=PathName & "\" & CarentFile) の上下に、以下のように書き込んで下さい。 On Error Resume Next 'エラーがあっても続行する Set ObjBook = Workbooks.Open(Filename:=PathName & "\" & CarentFile)If Err.Number <> 0 Then If Err.Number <> 0 Then 'エラーがあったら実行する   MsgBox Error(Err.Number) 'エラー番号に相当するメッセージを表示   Exit Sub 'マクロの実行を終了する End If

  • stouma
  • ベストアンサー率35% (142/399)
回答No.1

sub TEST() on error goto ErrHander If dir(PathName & "\" & CarentFile)<>"" Then   Application.ScreenUpdating = False   Set ObjBook = Workbooks.Open(Filename:=PathName & "\" & CarentFile)   他の処理 Else   msgbox "存在しないファイルが指定されています" End If Exit Sub ErrHander:   msgbox "何らかのエラーが発生しました。" End Sub 補足 上記の件はIF~End IFで対応しています。 またそのほかの場合はOn Errorの行ととErrHander:以降で対応しています。

kmasumi
質問者

お礼

一番早く回答いただきありがとうございました。 2番目の方のが簡単そうだったので、採用させていただきました。

関連するQ&A