很长一段时间以来,当我有一个错误处理程序时,我会让它报告错误被抛出的项目、模块和过程。我总是通过简单地通过常量存储它们的名称来实现这一点。我知道在一个类中,您可以使用 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 的情况下,这些信息当然只是有些帮助。