[VB6] エラートレースルーチンを使用してエラー内容をログファイルに出力

▶ in Visual Basic 6.0 > TIPS posted 2006.09.20 Wednesday / 22:46

デバッグに役立つ手法を紹介します。

  • まず、下記のコードを追加した標準モジュールに作成します。

Option Explicit

'通常は"on"の状態の時にログの書き込みを行う。
'ログの書き込みを停止する場合 "off" にする。
Private Const OutputSw = "on"

'--------------------------------
'  Error_OutputLog プロシージャ
'--------------------------------
Public Sub Error_OutputLog(Keyword As String)

  Dim NewX As Long        'エラーログファイルの使用可能なファイル番号
  Dim LogFile As String   'エラーログファイルのフルパス
 
  'offの場合、ログの書き込みを抑制する
  If OutputSw = "off" Then Exit Sub
 
  NewX = FreeFile
  LogFile = App.Path
  '末尾に¥が付いていなかったら付ける
  If Right$(LogFile, 1) <> "¥" Then
    LogFile = LogFile & "¥"
  End If
  'ログファイルの設定
  LogFile = LogFile & "Error.log"
  'ログファイルが存在しない場合、空のファイルを作成
  If FileExists(LogFile) = False Then
    Open LogFile For Append As #NewX
    Close #NewX
  End If
 
  'ログファイルのサイズが300KB以上のときは一旦削除する。
  If FileLen(LogFile) > 300000 Then
    Kill LogFile
  End If
 
  Open LogFile For Append As #NewX
   
    '各プロシージャのエラーハンドラをトレースする。
    Print #NewX, "エラー  フォーム名またはプロシージャ名 = " & Keyword & " でエラーが発生しています。"
    Print #NewX, "エラー  発生日時 = " & Format$(Now, "yyyy/mm/dd") & " " & Time
    Print #NewX, "エラー  概要(Description) = " & Err.Description
    Print #NewX, "エラー  番号(Number) = " & str(Err.Number)
    Print #NewX, "エラー  (Source) = " & Err.Source & vbCrLf
 
  Close #NewX
 
End Sub


  • 次にエラーをトレースするプロシージャの先頭に以下のコードを追加する。

On Error GoTo <ラベル>
ラベルは任意の文字列を指定してください。
  • そして、そのプロシージャの最後に以下のようなコードを追加する。


Exit  Sub
<ラベル>:
  Call Error_OutputLog("キーワード")
  Err.Clear


  • <ラベル>以下の部分をエラーハンドラと言いますが、そのエラーハンドラの前には必ずExit Subを入れてください。
    でないと、毎回エラーハンドラ部分を実行してしまいます。
    キーワードは、任意の文字列で例えばForm_Load等プロシージャ名をいれておくと良いでしょう。

  • これで、エラーが出た場合、実行ファイルと同じフォルダにError.logというファイルを作成し、エラー情報が書き込まれている事でしょう。そのエラー情報をメモ帳などで見る事でどこでエラーが起きたかが分かりデバッグしやすくなるでしょう。

PAGE TOP