デバッグに役立つ手法を紹介します。
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というファイルを作成し、エラー情報が書き込まれている事でしょう。そのエラー情報をメモ帳などで見る事でどこでエラーが起きたかが分かりデバッグしやすくなるでしょう。
Trackback URL|http://aizack.net/sb.cgi/33
Comments