• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VB6.0で、ランタイムエラーを全て出力するには?)

VB6.0でランタイムエラーを全て出力する方法

このQ&Aのポイント
  • VB6.0で作成したプログラムの実行中に発生したエラーを全てログに出力し、後続処理を継続する方法を教えてください。
  • 上記のプログラムでは、エラーが発生した場合に後続処理が中断されます。しかし、処理Aの後にもエラー情報を出力する処理を入れると、プログラムが冗長になります。そこで、どこでエラーが発生するか分からない前提とした場合、エラー情報を効率的に出力する方法はありませんか?
  • 質問者はVB6.0で作成したプログラムの実行中に発生したエラーを全てログに出力し、後続処理を継続したいと考えています。しかし、既存の方法ではエラー情報を出力する部分が冗長になってしまいます。質問者の要望を実現するために、どのような方法がありますか?

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

VB6.0自体には触れたことはないのですが(汗)、そこから派生した Access VBAでの経験から・・・ > 何か良い方法はありますでしょうか? 「On Error Resume Next」の代わりに、「On Error Goto」を 使用すれば、目的に適うのではないかと思います。 これを使用すると、エラー発生時には「GoTo」の後に示したラベル 位置のコードに処理が飛びます。 そこで、そのラベル位置以降に記載したコード(ここではエラーログを 記録するコード)を置き、その処理終了後、後続処理を続行する なら「Resume Next」を、エラー発生箇所の再試行を行うなら 「Resume」を、特定の行(→ラベルで指定)に飛ばすなら「Resume ラベル名」を、それぞれ指定します。 つまり、「On Error GoTo」と「Resume Next」の組み合わせを使用 すれば、「エラー発生のつど、ログを記録の上、後続処理を継続」が 可能となります。 あとは、エラーの発生位置を把握できるよう、適当な変数を設置して、 ログにその情報も含めてやればOkです。 Sub Main()   'エラー発生時は「エラー処理:」ラベル以降の処理に飛ばす   On Error GoTo エラー処理   Dim Phase As Integer, sMsg As String   'エラー発生位置を特定するためのインデックス「Phase」を記録   Phase = 1   Err.Raise 12  '処理Aの代わり   Phase = 2   Err.Raise 13  '処理Bの代わり   Phase = 3   Err.Raise 14  '処理Cの代わり   Phase = 4   Err.Raise 15  '処理Dの代わり 終了処理:  '←ラベルであることを示すため、末尾に「:」をつけます。   'エラー発生時以外で「エラー処理:」移行のコードが実行されるのを避けます。   Exit Sub エラー処理:   '必要に応じて、以下のような分岐処理を記述することもできます。   sPhase = "Phase=" & Phase & "にて、Err=" & Err.Number & "が発生しました。"   Select Case Err.Number     Case 12       MsgBox sMsg  'エラーログの記録の代わり       Resume Next       '【後続処理を継続】     Case 13:       If MsgBox(sMsg, vbRetryCancel) = vbRetry Then         Resume        '【エラー発生箇所を再試行】       Else         Resume 終了処理  '【処理中止(「終了処理」に移動)】       End If     Case Else       If MsgBox(sMsg, vbOkCancel) = vbOk Then         Resume Next     '【後続処理を継続】       Else         Resume 終了処理  '【処理中止(「終了処理」に移動)】       End If   End Select End Sub

sons_of_liberty
質問者

お礼

ありがとうございました。この方法で実現できました。

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.1

NTイベントログに出力するのがお手軽かつお勧め。

sons_of_liberty
質問者

お礼

ご回答ありがとうございました。

関連するQ&A