- ベストアンサー
VBAでのファイル読込エラーの対応方法
VBAについては、かなり素人です。 エクセルのメインシートからバックグラウンドで任意のファイルを次のようなVBAで読み込んでいます。 次の場合では、存在しないファイル名等をセットすると「ファイル読込エラー」になります。「存在しないファイルが指定されています」等を表示し、Open命令では、ストップしないようにするには、どう記述すればいか教示願います。 PathName:任意のパス名 CarentFile:任意のファイル名 Application.ScreenUpdating = False Set ObjBook = Workbooks.Open(Filename:=PathName & "\" & CarentFile)
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
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
その他の回答 (3)
- kouzi_kouji
- ベストアンサー率32% (67/205)
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を、入れておかないと、続きの処理を終わった後、エラー処理の部分を実行してしまいます。
お礼
ありがとうございました。もっと高度なことができるようになったら、使おうと思います。
- matsu_jun
- ベストアンサー率55% (146/265)
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)
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:以降で対応しています。
お礼
一番早く回答いただきありがとうございました。 2番目の方のが簡単そうだったので、採用させていただきました。
お礼
ありがとうございます。 On Error Resume Next Set ObjBook = Workbooks.Open(Filename・・・ If Err.Number <> 0 Then "無視したファイルをあるセルに表示" Exit Sub 以上のようにすることで、有効ファイルのみを読むことが できるようになりました。