Вам нужны обработчики ошибок, использующие On Error Goto
, чтобы вы могли выполнять свой собственный код при возникновении ошибки. (Кстати, в VB6 они называются ошибки не исключения .) Бесплатный инструмент MZTools превосходен - он может автоматически вставлять On Error Goto
и обработчик ошибок, который включает в себя имя текущей процедуры.
Вам также нужна общая процедура, которая записывает подробности об ошибках в файл, как показано ниже. Предупреждение о вреде для здоровья - я только что набрал это прямо, не проверяя его ( код воздуха ).
Sub MySub()
On Error Goto ErrHandler
'... Do something ...'
On Error Goto 0
Exit Sub
ErrHandler:
Call LogError("MySub", Err, Error$) ' passes name of current routine '
End Sub
' General routine for logging errors '
Sub LogError(ProcName$, ErrNum&, ErrorMsg$)
On Error Goto ErrHandler
Dim nUnit As Integer
nUnit = FreeFile
' This assumes write access to the directory containing the program '
' You will need to choose another directory if this is not possible '
Open App.Path & App.ExeName & ".log" For Append As nUnit
Print #nUnit, "Error in " & ProcName
Print #nUnit, " " & ErrNum & ", " & ErrorMsg
Print #nUnit, " " & Format$(Now)
Print #nUnit
Close nUnit
Exit Sub
ErrHandler:
'Failed to write log for some reason.'
'Show MsgBox so error does not go unreported '
MsgBox "Error in " & ProcName & vbNewLine & _
ErrNum & ", " & ErrorMsg
End Sub
Бонусное предложение: бросьте свой собственный след стека .
Предложение бонуса 2: отключите обработчики ошибок в IDE с помощью чего-то вроде If Not IsInIDE() Then On Error Goto Handler
, используя функцию IsInIDE
из здесь