错误后如何在VBA中重置计算模式



问题:

在VBA中,有没有任何方法可以在引发错误后执行一些清理代码,而不会A)通过手动引发错误而丢失本机错误消息的详细信息,或者B)插入&在我的代码中保持行号编辑以澄清:丢失的详细信息是本机错误消息上的"调试"按钮,该按钮会突出显示导致错误的行。

更多背景/信息:

我想在开始时将计算模式更改为手动模式,但我想确保在代码退出之前将其更改回手动模式。如果没有错误,这是可以的,但我认为即使遇到错误,也能确保它被引发的唯一方法是将异常处理程序更改为类似On Error Resume Next的程序,确保恢复计算模式,然后手动引发错误。但这样做会丢失错误发生的位置等细节;使得解决问题更加困难。

我能找到的唯一"解决方案"是手动(或使用工具)添加行号,然后可以用于手动引发的错误;但是维护起来似乎很麻烦,而且(imo)使代码有点混乱。

如果这真的是仅有的两种选择(我徒劳的搜索似乎表明情况确实如此;但很抱歉,如果这个问题在某个地方得到了答案,而我只是没有找到它),那就顺其自然吧;我将不得不选择其中一个。但我只是想看看是否有人知道其他选择?

伪代码:

(只是"手动引发错误并丢失详细信息"方法的快速模拟)编辑以澄清:下面代码中的错误很简单,只是让东西抛出错误;在这里,错误的位置是显而易见的,但在"真实"问题中,错误的触发位置可能并不明显(这就是本机错误消息上的调试选项的用武之地)。

Sub Example()
Dim OrigCalcMode as XlCalculation
OrigCalcMode = Application.Calculation
Application.Calculation = xlCalculationManual

On Error Resume Next
' Main code would go here, but to simply induce an error...
Dim Val as Integer
Val = 1 / 0
If Err.Number <> 0 Then
MsgBox ("Error Number: " & Err.Number & vbCrLf & vbCrLf & _
"Error Description: " & Err.Description)
Err.Clear
End If
On Error GoTo 0
Application.Calculation = OrigCalcMode
End Sub

您的示例可能有点过于简单-通常需要考虑(例如)如何处理调用代码中的错误,以及如何确定错误是否为";致命的";(所有后续步骤都应中止)或可恢复。

一种典型的方法可能是:

Sub Example()
Dim OrigCalcMode As XlCalculation

OrigCalcMode = Application.Calculation
Application.Calculation = xlCalculationManual

On Error GoTo haveError
' Main code would go here, but to simply induce an error...
Dim Val As Integer
Val = 1 / 0
cleanExit:
Application.Calculation = OrigCalcMode     'make sure to reset this
Exit Sub 'don't run into the error handler

haveError:
MsgBox "Error Number: " & Err.Number & vbCrLf & vbCrLf & _
"Error Description: " & Err.Description
'<Make any decisions about what to do with this specific error>
Resume cleanExit 'Resume clears the Err object

End Sub

最新更新