首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误处理不处理

错误处理不处理
EN

Stack Overflow用户
提问于 2014-12-22 20:13:03
回答 1查看 340关注 0票数 0

我已经写了一个excel VBA脚本,它引用了另一个打开的excel文档来获取它的一些数据。最近,我注意到,如果用户意外地关闭了这个次要文档,主脚本就会停止工作。显然,在我搜索它之前,我需要确认它是打开的。

下面是我想出的验证工作簿是否打开的代码。如果是的话,我就格式化它。如果不是,我就打开它(这会触发它自己的格式)。问题出现是因为我的错误处理程序捕获了“对象所需”错误号424。我试着解决这个问题,当这种情况发生时,我会指示它继续进行下去。不幸的是,它似乎希望选择其他情况,而不是案例424,并停止脚本。

代码语言:javascript
复制
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

下面是我的错误处理程序:

代码语言:javascript
复制
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

有人知道为什么会发生这种事吗?它必须在错误处理程序中,但我看到了许多类似于我的例子。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-22 21:29:45

正如吉他手在注释中所指出的,简单地将Resume Next放在错误处理中不会恢复您的宏返回错误发生的位置。要做到这一点,您需要在On Error GoTo searchGridsError行(如RestartHere: )之后放置另一个占位符,在该行中,您希望跳转回Resume Next,然后将Resume Next替换为:

代码语言:javascript
复制
On Error Resume Next
GoTo RestartHere

但是,一旦遇到错误424,这将绕过您的错误处理,因此您应该小心使用它。

一个更好的解决方案可能是将错误处理正确地放在代码中,您希望在代码中出现错误。您可以将代码保留为-原样。然而,就在抛出错误424的行之前,添加了On Error Resume Next。然后,在所讨论的行后面添加以下内容:

代码语言:javascript
复制
If Err.Number = 424 Then
    Err.Clear
End If
On Error GoTo searchGridsError
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27609753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档