代码之家  ›  专栏  ›  技术社区  ›  Fort Ash

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

  •  1
  • Fort Ash  · 技术社区  · 11 年前

    我正在使用应用程序。StatusBar在运行时更新宏的状态。这是因为我关闭了屏幕更新。

    现在,如果我在过程中停止宏,或者如果它遇到某种错误,状态栏将保持在上次设置的状态,从而显示程序仍在运行。

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

    2 回复  |  直到 8 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

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

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

        2
  •  0
  •   Mark Fitzgerald    11 年前

    我用的是这样的东西:

    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之前的计算状态,以防用户已经将其设置为xlManual-如果您重置为xlAutomatic,他们会很生气!

    重要的是,即使是应用程序。ScreenUpdating=False,应用程序。StatusBar可以在代码执行时更改。当您在消息框中单击“确定”时,StatusBar将恢复到其“正常”状态。