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

Taw*_*awm 6 vba try-catch onerror

我正在阅读如何使用On Error Resume Next,我正在试图找出该行将适用于该程序的时间.在Microsoft站点上,我发现这句话:"An On Error Resume Next语句在调用另一个过程时变为非活动状态." 这到底是什么意思?什么被认为是一个程序?

我问,因为我在我的程序中使用了这行,但是我不希望它出现Resume Next所有发生的运行时错误,只是下一行中的明显错误.


代码:Dim zRange As Range

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)
Run Code Online (Sandbox Code Playgroud)

我也发现(并且已知有一段时间)On Error或者GoTo行被认为是编码不好.有没有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)
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的时间.

Pra*_*mar 8

ON ERROR...声明的范围

ON ERROR ...遇到以下任何一种情况时, 结束的效果如下:

  1. 另一个ON ERROR ....(也许以ON ERROR RESUME x或的形式ON ERROR GOTO x)
  2. Exit Sub/ Exit Function在定义的相同子/函数内.
  3. End Sub/ End Function定义的子/函数.

难以使用ON ERROR RESUME NEXT吗?

是和否.

我想说如果不知道这个陈述会产生什么影响,就不要使用.尽可能避免.在任何可能的地方尽量缩短范围.

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


Mat*_*ewD 7

您只想在以下情况下使用“On Error Resume Next”:

  1. 你知道为什么会发生错误。

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

  3. 您可以在发生错误的代码后立即使用“On Error Goto 0”。

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

该网站的意思是,一旦您退出调用它的子程序或函数,接下来的简历将不再有效,并且您的错误将按其应有的方式出现。

更好的选择是以这种方式使用 goto。但有些人对此几乎同样不以为然。

sub SomeSub()
    On Error Goto TestFailed

    'Some code

    'Some code

    'Some code

Exit sub

TestFailed:
    'Some code here to alert you to and/or handle the fallout of the error.
End sub
Run Code Online (Sandbox Code Playgroud)