在宏之前运行Sub结束像Finally块

时间:2014-05-28 13:52:41

标签: vba error-handling

是否有一些VBA最佳做法可以在结束之前使用'子程序?

我正在更改Excel的默认配置,当我的宏启动时,在我的宏到达其结束子'之前我正在将配置重置为其标准。 但是如果出现一些错误呢?我应该定义' On Error'在所有潜艇内进行处理,将配置重置为标准属性?

例如,我正在更改配置,例如:

ScreenUpdating
DisplayStatusBar
Calculation
DisplayAlerts

2 个答案:

答案 0 :(得分:2)

我很确定在退出函数或子例程之前没有这样的机制被称为无条件。您可能有错误处理程序(但这些有条件地执行;请参阅ckuhn203的注释以获取示例。)

但是,对于类模块(即对象)的实例,存在这样的机制。当一个对象被销毁时(当任何变量/存储不再引用时会发生这种情况),它的Class_Terminate子程序被称为无关紧要的东西。如果你可以将你的任务包装在你创建它后立即丢弃的对象中,你可以覆盖覆盖这个子程序来进行清理。

答案 1 :(得分:1)

如果我正确理解您的问题,是的,最好的方法是在需要的每种方法中定义On Error Goto行,如下所示:

Public Sub DoSomething()

    On Error GoTo Finally ' Try
    Application.ScreenUpdating = False

    ' Do your stuff here

Finally:
    Application.ScreenUpdating = True


End Sub

即使出现错误,这也可以确保完成ScreenUpdating之类的操作。您还可以添加一个catch块,如下所示:

Public Sub DoSomething()

    On Error GoTo Catch ' Try
    Application.ScreenUpdating = False

    ' Do normal stuff here

    GoTo Finally
Catch:

' Do only error stuff here

Finally:
    Application.ScreenUpdating = True
End Sub

一般来说,GoTo是一种讨厌的做法,但对于错误捕捉,VBA会强迫你的手。