error handling不处理

我写了一个excel的VBA脚本,这个脚本引用了另一个打开的excel文档,用于它的一些数据。 最近我注意到,如果用户意外地closures了这个辅助文档,主脚本就不能工作了。 显然,我需要检查,确保它是开放的,然后再search它。

下面是我提出的validation工作簿是否打开的代码。 如果是这样,我格式化它。 如果不是,我打开它(触发它自己的格式)。 问题来了,因为我的error handling程序捕获“对象所需”的错误号码424.我试图通过指示它只是恢复下一次发生这种情况。 不幸的是,它似乎想要select其他情况,而不是情况424,并停止脚本。

On Error GoTo searchGridsError GridName = Workbooks(SALTname).Sheets(2).Range("B3").value If Verify.FirstOption.value = True Then Set Verify.groupGrid = Workbooks(GridName) If Verify.groupGrid Is Nothing Then Verify.checkForGrids Else formatWorkbook End If End If 

下面是我的error handling程序:

 searchGridsError: Select Case Err Case 18 Verify.clearData Exit Function Case 424 Resume Next Case Else MsgBox "An error has occurred while searching the customer number grid. Please try again or search manually." Module1.ReportError Err.Number, Erl, Err.Description, "searchGrids", Verify.Address1Box & "," & Verify.Address2Box & "," & Verify.CityBox & "," & Verify.StateBox & "," & Verify.ZipBox & "," & Verify.ContractBox & "," & Verify.PBPBox & "," & Verify.CountyBox Verify.clearData Exit Function End Select End Function 

有没有人有任何想法,为什么发生这种情况? 它必须在error handling程序中,但我看到很多很多例子,看起来就像我的。

正如guararthrower在注释中所述,只要在error handling中放置Resume Next就不会将错误恢复到发生错误的位置。 为此,您需要在On Error GoTo searchGridsError行之后放置另一个占位符,如RestartHere:您要跳回的位置,然后将Resume Nextreplace为:

 On Error Resume Next GoTo RestartHere 

但是,一旦遇到错误424,这将绕过你的error handling,所以你应该警惕它是如何使用的。

可能更好的解决scheme是将您的error handling正确的放在您希望发生错误的代码中。 你可以保留你的代码大部分原样。 但是,正在投掷错误424行之前,您添加On Error Resume Next 。 然后,在有问题的行之后,添加以下内容:

 If Err.Number = 424 Then Err.Clear End If On Error GoTo searchGridsError