【发布时间】:2017-05-09 17:01:34
【问题描述】:
由于 On Error Resume Next 继续执行下一条语句而不是下一行,是否有人对将它与 If 语句一起使用有任何建议?
On Error Resume Next
For i = 1 To r
If dataArray(i,1) <10 Then
intA = intA + 1
End If
If dataArray(i,2) <10 Then intB = intB + 1
If dataArray(i,2) <10 Then _
intC = intC + 1: intD = intD + 1
Next i
On Error GoTo 0
上面每种风格的If语句,在出错的情况下依然会进行加法,比如元素dataArray(i,1)包含文本。这可以通过错误处理程序来解决,但如果有多个 If 语句,这会变得混乱。有人有什么建议吗?
【问题讨论】:
-
你能更好地解释你想要达到的目标吗?以及您在哪里得到错误(不使用
On Error Resume Next)。有时最好捕获并处理您的错误) -
您可以随时添加额外的测试
If Err.Number = 0,也可以在适当的情况下使用Err.Clear之类的语句。但是,您不应该大量依赖On Error Resume Next机制,它只是一个非常方便的“技巧”,但如果您真的想在您的代码中到处依赖它,您真的应该重新考虑这个决定。 -
例如在上面的代码中,如果变量不能保证是数字,一个好的代码应该先用
IsNumeric测试它而不是指望错误处理,因为后者不是flow control指令。 -
@A.S.H;
IsNumeric()函数必须有意识地处理。例如IsNumeric("1,.23")会返回 True... 所以我只在我知道我有“声音”数据时才使用它,即 real 数字或文本。如果 OP 的dataArray来自range,那么安全的方法是 first 使用SpecialCells()过滤 number 单元格并 then 填充数组并操作其数据 -
@A.S.H,我同意,我没有反驳你评论的那部分。此外,
SpecialCells()方法正朝着这个方向发展。我只是指出了一个微妙的IsNumeric()陷阱!
标签: arrays vba excel error-handling