В течение очень долгого времени, когда у меня есть обработчик ошибок, я заставляю его сообщать, в каком проекте, модуле и процедуре возникла ошибка. Я всегда добивался этого, просто сохраняя их имена через константы. Я знаю, что в классе вы получаете имя программно с помощью TypeName(Me), но, очевидно, это дает мне только одну из трех частей информации и только тогда, когда я не в «Стандартном» модуле.
У меня нет действительно большой проблемы с использованием констант, просто люди не всегда поддерживают их в актуальном состоянии или, что еще хуже, они копируют и вставляют, а затем вы сообщаете неправильное имя и т. д. Так что я хотел бы нужно найти способ избавиться от констант, показанных в примере, без потери информации.
Option Compare Binary
Option Explicit
Option Base 0
Option Private Module
Private Const m_strModuleName_c As String = "MyModule"
Private Sub Example()
Const strProcedureName_c As String = "Example"
On Error GoTo Err_Hnd
Exit_Proc:
On Error Resume Next
Exit Sub
Err_Hnd:
ErrorHandler.FormattedErrorMessage strProcedureName_c, m_strModuleName_c, _
Err.Description, Err.Source, Err.Number, Erl
Resume Exit_Proc
End Sub
Кто-нибудь знает способы, чтобы код сказал, где он находится? Если вы можете убедительно показать, что это невозможно сделать, это тоже ответ :)
Редактировать:
Мне также известно, что имя проекта находится в Err.Source. Я надеялся, что смогу получить его без исключения для других целей. Если вы хорошо знаете, если нет, мы можем определить, что это выходит за рамки вопроса.
Я также знаю, как получить строку с ошибкой, но эта информация, конечно, лишь в некоторой степени полезна без знания Module.Procedure.