如果宏 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"”状态。
我正在使用 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"”状态。