如果宏返回错误Excel VBA,请重置状态栏

时间:2015-09-21 09:17:07

标签: vba excel-vba reset status excel

我使用Application.StatusBar在运行时更新宏的状态。这是因为我关闭了ScreenUpdating。

现在,如果我在此过程中停止了我的宏,或者遇到某种错误,状态栏会保持上次设置的状态,这样程序的外观仍会运行。

有没有办法在这种情况下重置状态栏?

2 个答案:

答案 0 :(得分:2)

有错误,是的,使用On Error语句。例如,参见https://stackoverflow.com/a/32469215/2877364

使用调试器停止宏的执行时,不是我所知道的。但是,您可以编写一个单独的宏,其中没有参数只会重置状态行。然后,您可以从VB编辑器中的立即窗口运行该宏。

答案 1 :(得分:0)

我使用这样的东西:

Sub GracefulExit()
Dim ErrMsg As String

    On Error GoTo Ender:
    Application.Calculation = xlCalculationManual
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    Application.StatusBar = "Running GracefulExit"
    Err = 1004 'Set an error to invoke Ender:

Ender: 'This will defy indentation in a module - it always stays in col 1
    If Err <> 0 Then 'display the error
        ErrMsg = "An unexpected error has occured:" & vbCrLf & vbCrLf _
        & vbTab & "Error No: " & Err & vbCrLf _
        & vbTab & "Description: " & Error & vbCrLf _
        & vbTab & "StatusBar was: """ & Application.StatusBar & """"
        MsgBox ErrMsg, vbCritical
    End If 'otherwise reset the Application settings
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    Application.StatusBar = ""
    Application.ScreenUpdating = True
End Sub

提供各种设置作为您可能想要操作的一些示例。您可能希望在将其设置为xlManual之前测试并存储Application.Calculation状态,以防用户已将其设置为xlManual - 如果您重置为xlAutomatic,它们将会烦恼!

重要的是,即使Application.ScreenUpdating = False,也可以在代码执行时更改Application.StatusBar。当您在消息框上单击“确定”时,StatusBar将恢复为“正常”状态。