我使用Application.StatusBar在运行时更新宏的状态。这是因为我关闭了ScreenUpdating。
现在,如果我在此过程中停止了我的宏,或者遇到某种错误,状态栏会保持上次设置的状态,这样程序的外观仍会运行。
有没有办法在这种情况下重置状态栏?
答案 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将恢复为“正常”状态。