通过扩展调试优化错误搜索

使用行号…并在出错时记录它们 (“看到 Erl 的重要性”)

检测哪一行引发错误是任何调试的重要部分,并缩小搜索原因的范围。使用简短描述记录已识别的错误行可以完成成功的错误跟踪,最好与模块和过程的名称一起完成。以下示例将这些数据保存到日志文件中。

背景

错误对象返回错误号(Err.Number)和错误描述(Err.Description),但没有明确地回答问题在哪里找到错误。该 Erl 的功能,但是,的确,但是在你添加**条件*行号 的代码(其他几个让步 BTW 一个前基本次)。

如果根本没有错误行,则 Erl 函数返回 0,如果编号不完整,你将获得该过程的最后一个行号。

Option Explicit

Public Sub MyProc1()
Dim i As Integer
Dim j As Integer
On Error GoTo LogErr
10     j = 1 / 0    ' raises an error
okay:
Debug.Print "i=" & i
Exit Sub

LogErr:
MsgBox LogErrors("MyModule", "MyProc1", Err), vbExclamation, "Error " & Err.Number
Stop
Resume Next
End Sub

Public Function LogErrors( _
           ByVal sModule As String, _
           ByVal sProc As String, _
           Err As ErrObject) As String
' Purpose: write error number, description and Erl to log file and return error text
  Dim sLogFile As String: sLogFile = ThisWorkbook.Path & Application.PathSeparator & "LogErrors.txt"
  Dim sLogTxt  As String
  Dim lFile    As Long

' Create error text
  sLogTxt = sModule & "|" & sProc & "|Erl " & Erl & "|Err " & Err.Number & "|" & Err.Description

  On Error Resume Next
  lFile = FreeFile

  Open sLogFile For Append As lFile
  Print #lFile, Format$(Now(), "yy.mm.dd hh:mm:ss "); sLogTxt
      Print #lFile,
  Close lFile
' Return error text
  LogErrors = sLogTxt
 End Function

附加代码显示日志文件

Sub ShowLogFile()
Dim sLogFile As String: sLogFile = ThisWorkbook.Path & Application.PathSeparator & "LogErrors.txt"

On Error GoTo LogErr
Shell "notepad.exe " & sLogFile, vbNormalFocus

okay:
On Error Resume Next
Exit Sub

LogErr:
MsgBox LogErrors("MyModule", "ShowLogFile", Err), vbExclamation, "Error No " & Err.Number
Resume okay
End Sub