- ベストアンサー
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
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。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
その他の回答 (1)
「ファイルが存在しない」事象は必ずしもエラー処理にすべきとは思いません。 Dir関数なりFSO ( FileSystemObject ) でファイルの有無を判定すればよいのでは? ※ あるかないかわからないプロパティにアクセスする場合、敢えてエラーで処理してしまう場合はあります。 ( エラー処理を使わない、となると、全プロパティを総ナメすることになるので )
お礼
ありがとうございます。 フムフム なるほど、こういう方法もあるのですね。 今の私には ちょっと高度?かな、 この内容でも 勉強してみます。
お礼
maruru01さん ありがとうございます!! なるほど、Err.Clearですね。 まったく この知識ありませんでした。 お陰様で、できました。感謝です! また、「先にファイルの存在チェックをする」方法も 採用させて頂いております。 発想の転換ですね!