通過擴充套件除錯優化錯誤搜尋
使用行號…並在出錯時記錄它們 (“看到 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