• ベストアンサー

VBA トラップを再開させるには?

一度ご質問させていただいたのですが、 どうも上手くできなくて・・・ <連番の付いた複数のFileを順に呼び出すプログラム> ForループでFileナンバーをインクリメントして行く方法で作成。 もしFileが存在しない場合、ラベルで警告して継続させたい。 この時、On Error GoTo をループ内で使って処理をしたのですが、 1回目は上手く行き、2回目がトラップできませんでした。何故?? Fileが存在しない場合、メッセージを出しますが、 2回目にエラーが発生したときは、トラップに掛かりません。 (***Fileが見当たりません…のコーションラベルが表示される) Resumeを使っても、エラーが発生した"後"から開始されるので それでは、Fileを開きにすら行きません。 何か、良い方法はないでしょうか???? Sub FileOpen() Dim N As Integer   For N=1 To 100 On Error GoTo ErrorRtn:   Workbooks.OpenText Filename:= N & ".csv" ErrorRtn: MsgBox  "Fileが有りません" Next End sub

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 どうしてもエラートラップで処理したいんですね(笑)。 私なら、エラーをスルーした後でエラー番号で確認します。 Sub FileOpen()   Dim N As Integer   On Error GoTo Resume Next   For N=1 To 100     Workbooks.OpenText Filename:= N & ".csv"     If Err.Number <> 0 Then       MsgBox "Fileが有りません"       Err.Clear     End If   Next N End sub ちなみに、元の質問のコードだと、エラーではなくちゃんとファイルを開いても、メッセージを出してしまうと思います。 ラベル行はForループの外へ出しましょう。 また、Resume Nextで戻る前に、Err.Clearでエラーをリセットすればいいと思います。 Sub FileOpen()   Dim N As Integer   On Error GoTo ErrorRtn   For N=1 To 100     Workbooks.OpenText Filename:= N & ".csv"   Next N   Exit Sub ErrorRtn:   MsgBox "Fileが有りません"   Err.Clear   Resume Next End sub

rayde-su
質問者

お礼

maruru01さん ありがとうございます!! なるほど、Err.Clearですね。 まったく この知識ありませんでした。 お陰様で、できました。感謝です! また、「先にファイルの存在チェックをする」方法も 採用させて頂いております。 発想の転換ですね!

その他の回答 (1)

noname#5584
noname#5584
回答No.2

「ファイルが存在しない」事象は必ずしもエラー処理にすべきとは思いません。 Dir関数なりFSO ( FileSystemObject ) でファイルの有無を判定すればよいのでは? ※ あるかないかわからないプロパティにアクセスする場合、敢えてエラーで処理してしまう場合はあります。 ( エラー処理を使わない、となると、全プロパティを総ナメすることになるので )

rayde-su
質問者

お礼

ありがとうございます。 フムフム なるほど、こういう方法もあるのですね。 今の私には ちょっと高度?かな、 この内容でも 勉強してみます。

関連するQ&A