VBA:On Error Resume Next工作多长时间了?

时间:2015-07-31 18:53:57

标签: vba try-catch onerror

我正在阅读有关如何使用On Error Resume Next的内容,并且我正在尝试确定该行将适用于该程序的时间。在Microsoft站点上,我发现这句话:“An On Error Resume Next语句在调用另一个过程时变为非活动状态。”这到底是什么意思?什么被认为是程序?

我问,因为我在我的程序中使用了这行,但是我不希望Resume Next发生所有运行时错误,只是下一行中显而易见的错误。

代码:

Dim zRange As Range

Call FilterTableFor(fieldNameColumn, Array("baseunitprice", "burden", "MTLBURRATE", "PurPoint", "Vendornum"))

On Error Resume Next
Set zRange = commentsColumnRange.SpecialCells(xlCellTypeVisible)
zRange.Formula = "target"

Call FilterTableFor(fieldNameColumn)

我还发现(并且暂时知道)On ErrorGoTo行被认为编码不佳。我可以使用Try-Catch作为这样的一行吗?

我在想这样的事情:

Dim zRange As Range

Call FilterTableFor(fieldNameColumn, Array("baseunitprice", "burden", "MTLBURRATE", "PurPoint", "Vendornum"))

Try
Set zRange = commentsColumnRange.SpecialCells(xlCellTypeVisible)
zRange.Formula = "target"
Catch()

Call FilterTableFor(fieldNameColumn)

我甚至没有做任何事情,因为我觉得不需要。

感谢您的时间。

4 个答案:

答案 0 :(得分:8)

ON ERROR...语句的范围

ON ERROR ...的效果会在遇到以下任何一种情况时立即结束:

  1. 另一个ON ERROR ...。 (可能采用ON ERROR RESUME xON ERROR GOTO x
  2. 的形式
  3. Exit Sub / Exit Function在定义的相同子/函数中。
  4. End Sub / End Function所定义的子/函数。
  5. 难以使用ON ERROR RESUME NEXT

    是和否。

    我会说在不知道这个陈述会产生什么影响的情况下不要使用。尽可能避免。在任何可能的地方尽量缩短范围。

    要取消ON ERROR RESUME NEXT语句的效果,您可以调用ON ERROR GOTO 0

答案 1 :(得分:4)

你只想使用" On Error Resume Next"当

  1. 您知道错误发生的原因。

  2. 您知道它不会影响代码的其他部分。

  3. 您使用" On Error Goto 0"紧接在发生错误的代码之后。

  4. 话虽如此,你几乎不应该使用它。您应该弄清楚错误发生的原因以及处理错误的代码。

    网站所说的是,一旦你的子网或功能被调用,接下来的简历将不再有效,你的错误将会提升。

    更好的选择是以这种方式使用goto。但有些人对此几乎不屑一顾。

    Array
    (
        [retval] => Array
            (
                [count] => 10
            )
    
        [ok] => 1
    )
    

答案 2 :(得分:1)

回答你的问题" On Error Resume Next工作多久了?"

答案是:直到下一个On error ...

的定义

因此,如果您定义On error resume next,则会在您定义On error goto 0On error goto label

之前跳过每个错误

答案 3 :(得分:0)

You don't always need a bunch of code to handle an error, but you really should do something with it. Maybe just have your code change the cells.font.color property to vbRed. Simply doing On Error Resume Next (a line of code that might error) On Error Goto 0 is terribly poor form.

And like others have pointed out, On Error Goto Label is essentially VBA's version of Try ... Catch, and I use it frequently