如果宏 returns 出错 Excel VBA 重置状态栏

Reset status bar if a macro returns an error Excel VBA

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

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

遇到这种情况有什么方法可以重置状态栏吗?

有错误,是的,使用On Error语句。参见,例如, .

据我所知,当您使用调试器停止宏的执行时。但是,您可以编写一个不带参数的单独宏来重置状态行。然后,您可以 运行 在 VB 编辑器中从即时 window 中获取该宏。

我用的是这样的:

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 也可以在您的代码执行时更改。当您单击消息框上的“确定”时,状态栏将恢复到其“"normal"”状态。