【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?

<連番の付いた複数のFileを順に呼び出すプログラム>
ForループでFileナンバーをインクリメントして行く方法で作成。
もしFileが存在しない場合、ラベルで警告して継続させたい。
この時、On Error GoTo をループ内で使って処理をしたのですが、
1回目は上手く行き、2回目がトラップできませんでした。何故??

Sub FileOpen()

Dim N As Variant

 For N=1 To 100

  On Error GoTo ErrorRtn:
  Workbooks.OpenText Filename:= N & ".csv"

ErrorRtn:
MsgBox  "Fileが有りません"
 Next

End sub

A 回答 (3件)

こんにちは。

maruru01です。

On Errorステートメントで逃げるのではなく、先にファイルの存在チェックをするべきでは?
あと、Variant型を使用するのは極力控えましょう。
ループカウンタは整数に決まっているので、IntegerかLongを使用しましょう。


Sub FileOpen()

  Dim N As Long
  Dim ret As String

  For N=1 To 100
    ret = Dir(ファイルの保存パス & N & ".csv")
    If Len(ret) = 0 Then
      MsgBox N & ".csvファイルが有りません"
    Else
      Workbooks.OpenText Filename:= N & ".csv"
    End If
  Next

End sub
    • good
    • 0
この回答へのお礼

ありがとうございます。
このプログラム大変参考になりました!

ちなみに こういった処理で
On Error は あまり使わないのでしょうか?

お礼日時:2003/10/03 17:20

Sub FileOpen()



Dim N As Variant

On Error GoTo ErrorRtn:
Workbooks.OpenText Filename:= N & ".csv"

ErrorRtn:
MsgBox "Fileが有りません"
Resume
End sub

Resumeキーワードを使えばループを使わなくても戻れます。
ただ、このままではずっとファイルが存在しない限り処理が進まないので、Resumeで戻る前に何かしらの判断をつけてあげればいいでしょう。

もしくは、どうしてもループで処理したいのであれば、On Error Resume Nextを使用し、エラーが発生する可能性のある処理を呼び出した後にエラー番号をチェックします。
    • good
    • 0

For~Next の間に


行ラベル入れては
まずいかと。

For N = 1 To 100

 On Error GoTo ErrorRtn:
 Workbooks.OpenText Filename:=N & ".csv"
Next
Exit Sub

ErrorRtn:
MsgBox "Fileが有りません"
Resume Next
    • good
    • 0
この回答へのお礼

ありがとうございます

ResumeNextの後は、エラー発生の "次"から再開としたら
再開後は、OpenFileには行かないのでしょうか??

お礼日時:2003/10/03 17:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!