VBA エラーハンドラーについて

このQ&Aのポイント
  • VBAについてお教えください。テキストファイルを開いて、データ処理を行おうと思っています。
  • ループが無事に終わって、ファイルを閉じるところまで行くのは良いのですが、Close #FNoの後に処理がErrorHandler:に移ってしまいます。
  • 特に問題が無ければ、ErrorHanderを飛び越えてend subに行くと思っていたのですが、認識が違うのでしょうか?
回答を見る
  • ベストアンサー

VBA エラーハンドラーについて

VBAについてお教えください。テキストファイルを開いて、データ処理を行おうと思っています。 下記のような処理をおこなっています。 On Error GoTo ErrorHandler 'ファイル番号を取得 FNo = FreeFile Do While Not EOF(FNo) ~~処理 ~~処理 Loop 'ファイルを閉じる Close #FNo ErrorHandler: ~~処理 end sub ループが無事に終わって、ファイルを閉じるところまで行くのは良いのですが、Close #FNoの後に処理がErrorHandler:に移ってしまいます。 特に問題が無ければ、ErrorHanderを飛び越えてend subに行くと思っていたのですが、認識が違うのでしょうか? それとも何らかのエラーが起こっているのでしょうか?

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.1

本来は、どのようなエラーを想定しているか、によって 答えは違ってくると思いますが、、、 ' ' ============= ・・・ Exit Sub ErrorHandler: ~~処理 End Sub ' ' ============= のようにするのが一般的です。 > 特に問題が無ければ、ErrorHanderを飛び越えてend subに行くと思っていたのですが、認識が違うのでしょうか? 飛び越えません。 以上です。

mellow91
質問者

お礼

飛び越えないのですか・・・勉強になりました。ありあとうございます。

関連するQ&A

  • Access(VBA)のエラー処理

    いつもお世話になりますm(__)m Access2003(VBA)のエラー処理について教えて下さい。 いつも、エラー処理は、各private sub毎に記述しています。 例えば private sub A() on error goto ErrShori (処理など) exit sub ErrShori: (エラー処理) end sub private sub B() on error goto ErrShori (処理など) exit sub ErrShori: (エラー処理) end sub 上記のようにしていますが、エラー処理は共通で、どうにか1つの記述(?)で全てのプロシージャに対してエラー処理が出来ればと思っています。 いろいろ調べましたが見あたらず、今は一つ一つのプロシージャに「on error...」と書いています。 MDBファイル単位で「エラーがあるとこれを実行」のような共通のエラー処理を実装する事は出来ないのでしょうか? お詳しい方、是非ご教授下さい。可能であればサンプルを記述頂くと助かります。 宜しくお願い致しますm(__)m

  • VBA エラートラップができない

    <連番の付いた複数の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

  • 簡単なエクセルVBA

    最近エクセルのVBAを勉強し始めたのですが、 1×1=1 1×2=2 1×3=3  ・  ・ 9×9=81 と出るようにしたいのですが、 Sub kuku() Do While i < 9 i = i + 1   Do While j < 9   j = j + 1   a = i * j   Debug.Print i; "×"; j; "="; a   Loop Loop End Sub としたところ1×9=9までしかでません。 どうすれば上手くループするようになるでしょうか? お願いします。

  • VBAでエラートラップがうまくいきません。

    VBAで次のようなプロシージャを実行してみました。 Private Sub Worksheet_SelectionChange(ByVal Target As Range)   If Target.Value = " " Then          ~コード~   END IF END SUB すると複数のセルが選択されるとエラーがでます。そこで次のようにしてみました。 Private Sub Worksheet_SelectionChange(ByVal Target As Range)   On Error GoTo エラー処理   If Target.Value = " " Then     On Error GoTo 0           ~コード~   END IF   EXIT SUB エラー処理:   EXIT SUB END SUB ところがこれでもやっぱりIF文のところでエラーがでます。 当方初心者でなぜエラーがでるのかわかりません。 わかりやすくご教授ください。 よろしくお願いします。

  • なぜvbaコードに「#」を付けてもエラーにならないのか?

    なぜvbaコードに「#」を付けてもエラーにならないのか? Sub Sample21() Dim n As Long n = FreeFile Open "D:\Test.txt" For Output As #n Print #n, Now Close #n End Sub というテキストファイルに書き込むマクロですが 「#n」はなぜエラーにならないのですか? 標準モジュールでは、 「#」と書くとコンパイルエラーになるのに For Output As #n だと大丈夫な理由が知りたいです。 あと、気付いた事は 「#」は「&」や「=」と同じ色で表示されます。

  • VBAで任意のフォルダ内のファイルの特定の文字列を

    お世話になります。今、Excelを使用しVBAで任意のフォルダ内に含まれるファイル(txt形式ですが拡張子はありません)から、特定のA~Bの部分の文字列のみを抜き出し、ExcelのSheetに出力させるというVBAを作成しようと考えています。また、A~Bで抽出した文字列内に”空白”が含まれる場合、その空白でセルを隔てるという処理を加えたいです。 また、それらとは別に任意のフォルダ内に含まれるファイルのファイル名のみを抽出し、Excelに出力するというVBAも作ろうと考えています。 私自身、これまでExcelでは関数を使うのが精一杯でVBAの勉強すらしてきませんでしたので、だいぶ困窮しております。 どなたか、VBAについて詳しい方、ご教授いただけたら幸いです。 以下は、参考までに、特定のフォルダ内に含まれるファイルをSheetに出力するVBAになります。 ここからさらに、任意の文字列を検索し、抽出し、出力する機能と、また空白部分でセルを分ける機能、またファイル名一覧を抽出する機能を加えていきたい所存です。 どなたか、お力添えの程何卒よろしくお願い致します。 Sub GetAllFile() Dim buf As String, tmp As Variant, cnt As Long, i As Long Dim myFol As String, myFile As String Dim fNo As Integer, myCol As Long With Application.FileDialog(msoFileDialogFolderPicker) .Title = "*** 対象フォルダを選択し、[OK]をクリック ***" .InitialFileName = "C:\" If .Show = True Then myFol = .SelectedItems(1) End If End With myFile = Dir(myFol & "\*") myCol = 0 Do While myFile <> "" fNo = FreeFile Open myFol & "\" & myFile For Input As #fNo Do Until EOF(fNo) Line Input #fNo, buf tmp = Split(buf, ",") cnt = cnt + 1 For i = 1 To UBound(tmp) + 1 Cells(cnt, i + myCol) = tmp(i - 1) Next i Loop Close #fNo myFile = Dir() myCol = myCol + 4 cnt = 0 Loop End Sub 上記、VBAは動作はしましたが、やはりフォルダ内のファイル数の数により、途中でフリーズしてしまう事もありました。ご教授の程、何卒よろしくお願い致します。

  • VBAフォルダ内ファイル入出力について

    Accessで特定のフォルダ内にあるcsvファイルを全て読み込み、別のcsvファイルへ 出力するという処理を作りたいのですが、最近からVBAを始めたばかりで どうすればよいか分かりません。 とりあえず、特定のファイルをひとつ読み込み、別ファイルへ出力することはできました。 Option Compare Database Private Sub Button_Click() Dim No As Integer Dim buf No = FreeFile Open "C:\test1.csv" For Input As #1 Open "C:\test2.csv" For Output As #2 Do Until EOF(No) Line Input #1, buf Print #2, buf Loop MsgBox "処理終了" Close #1 Close #2 End Sub 読み込み対象を「特定のフォルダ内のファイル全て」 にする方法が知りたいです。 ちなみに出力先のファイルはひとつにまとめてもそれぞれ別のファイルに 出力でもどちらでも構いません。 できれば両方教えていただければ有難いです。 宜しくお願いします。

  • ExcelのVBA で実行エラー5

    ExcelのVBA で実行時エラー5のプロシージャの呼び出し、または引数が不正です。 と出るのですが、何が悪いのでしょうか? 引っかかる部分は下のコードの「tf.Writeline (Wl)」のところです。 'On Error GoTo ErrorHandler tf.Writeline (Wl) On Error GoTo 0 Wl = "" C = C + 1 End If 回答よろしくお願いします。

  • On Error GoTo でエラーが発生する

    Sub Macro1() On Error GoTo ErrorTrap1     '-エラーの発生するコード 1 ErrorTrap1: On Error GoTo 0    Do    On Error GoTo ErrorTrap2       '-エラーの発生するコード 2    On Error GoTo 0    Loop ErrorTrap2: End Sub しかし、以下のようにSubで二つに分けるとエラーは出ません。 Sub Macro1() On Error GoTo ErrorTrap1     '-エラーの発生するコード 1 ErrorTrap1: On Error GoTo 0 Call Macro2 End Sub Sub Macro2()     Do      On Error GoTo ErrorTrap2       '-エラーの発生するコード 2     On Error GoTo 0     Loop   ErrorTrap2: End Sub 「On Error GoTo 0」がうまく解除できていないのかと思い、いろいろ試してみました。 しかし、どういった理由かはわかりませんでした。 「On Error GoTo」は、Subでは、ひとつしか使えないのでしょうか。

  • Excel 2010 VBA:ファイル名を読み込む

    下は複数のcsvファイルを一つに合体するVBAです。これにシートの右端に読み取ったファイル名を追加するにはどうしたらよいでしょうか。 よろしくお願いします。 Sub macro1() Dim myPath As String Dim myFile As String Dim s As String myPath = ThisWorkbook.Path & "\" On Error Resume Next Kill myPath & "合体版.csv" On Error GoTo 0 myFile = Dir(myPath & "*.csv") If myFile = "" Then Exit Sub Open myPath & "合体版.csv" For Output As #1 Do Until myFile = "" Open myPath & myFile For Input As #2 Do Until EOF(2) Line Input #2, s Print #1, s Loop Close #2 myFile = Dir() Loop Close #1 End Sub

専門家に質問してみよう