通過擴充套件除錯優化錯誤搜尋

使用行號…並在出錯時記錄它們 (“看到 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