我也发现自己反复向我的程序中添加类似的错误处理代码,至少可以说有点乏味。有一个名为MZTools的VBIDE插件,可以添加代码片段,您可以轻松地将代码片段嵌入代码中,包括错误处理程序。片段允许包含占位符,例如过程名称,因此它可以适应目标过程。之前的版本是免费的,但v8确实需要花费,我认为它有点贵,但它有很多其他功能,它是您的选择。
这是一个典型的错误处理,你可以看到占位符是如何工作的
Dim mpSettings As ApplicationSettings
Dim mpTopLevel As Boolean
Const mpProcedure As String = "{PROCEDURE_NAME}"
On Error GoTo {PROCEDURE_NAME}_Error
'can be a top-level call or initiated by another
mpTopLevel = IIf(IsArrayAllocated(mgVecProcStack), False, True)
PushProcedureStack mpProcedure, mpTopLevel
{PROCEDURE_NAME}= True
Call AppSettings(State:="Set", _
AppType:=mpSettings, _
AppEvents:=True, _
AppScreen:=True, _
AppAlerts:=False, _
AppCalc:=appNotEnabled)
{PROCEDURE_BODY}
{PROCEDURE_NAME}_Tidy:
PopProcedureStack
{PROCEDURE_NAME}_Tear_Down:
{PROCEDURE_NAME}_Exit:
Call AppSettings(State:="Reset", _
AppType:=mpSettings, _
AppEvents:=True, _
AppScreen:=True, _
AppAlerts:=False, _
AppCalc:=appNotEnabled)
Exit Function
{PROCEDURE_NAME}_Error:
If Err.Number = mgBypassErrorNum Then Resume {PROCEDURE_NAME}_Tear_Down
{PROCEDURE_NAME} = False
If AppErrorHandler(mmModule, mpProcedure, mpTopLevel) Then
Stop
Resume
Else
Resume {PROCEDURE_NAME}_Exit
End If
我有MZTools或作者没有关系,它只是一个工具,我使用并从获得的价值。
可能出现的[VBA错误处理良好模式]的副本(http://stackoverflow.com/questions/1038006/good-patterns-for-vba-error-handling) – RubberDuck 2014-10-29 13:29:24
可能出现[Error Handler - Exit Sub vs 。End Sub](http://stackoverflow.com/questions/1377152/error-handler-exit-sub-vs-end-sub) – 2015-04-08 07:44:28