如何在for循环中跳过#N / A,同时保持原样并继续?

我正在运行这个for循环通过我的代码,但AV列中的一些单元格有#N / A,并抛出一个错误。 剩下的就是我到目前为止所需要的,但是如果它碰到#N / A就会停下来。 我发现像IFERROR和ISNA一些东西,但我不知道如何把它放到我的代码。 我只想忽略#N / A并移到下一行,而把#N / A留在原来的位置。 我只是想跳过它,继续代码。 我怎么能这样做呢?

Dim lngRow As Long Dim lngRows As Long 'Find the last row in Column A lngRows = Range("A" & Rows.Count).End(xlUp).Row For lngRow = lngRows To 2 Step -1 If (LCase(ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AV").Value) = "lu" _ Or LCase(ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AV").Value) = "st" _ Or LCase(ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AV").Value) = "so") _ And LCase(ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AU").Value) = "union" Then ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AW").Value = "MATCH" End If Next 

提前感谢您的帮助!

我build议使用error handling程序。 On Error Goto语句指示Excel在发生错误时跳转到不同的代码行。 使用它最简单的forms是:

 Dim lngRow As Long Dim lngRows As Long Dim s as String With ActiveWorkbook.Worksheets("SAP to ADP") 'Find the last row in Column A lngRows = .Range("A" & .Rows.Count).End(xlUp).Row On Error Resume Next For lngRow = lngRows To 2 Step -1 s = "" s = LCase(.Cells(lngRow, "AV").Value) If (s = "lu" Or s = "st" Or s = "so") _ And LCase(.Cells(lngRow, "AU").Value) = "union" Then .Cells(lngRow, "AW").Value = "MATCH" End If Next lngRow On Error Goto 0 End With 

您的代码还有其他更改。 首先,每次引用ActiveWorkbook.Worksheets("SAP to ADP")都不需要引用,所以在With块中使用它。
其次,在计算最后一行的地方有一个小小的错误。 该range没有被明确地引用,因为在该表单上,它可以是在macros运行时活动的任何表格。 With块现在就照顾好了。
最后,如果多次使用中间值,则存储中间值会更经济,并且会花费function调用。 它使代码更具可读性。
编辑:
On Error Goto语句激活error handling例程。 如果我们在这里使用它,第二个运行时错误不会被忽略。 相反,使用On Error Resume Next跳过下一个可能的违规行。 所有#N / A字段现在被忽略。

添加错误testing:

 Dim lngRow As Long Dim lngRows As Long 'Find the last row in Column A lngRows = Range("A" & Rows.Count).End(xlUp).Row For lngRow = lngRows To 2 Step -1 IF Not IsError(ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AV") Then If (LCase(ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AV").Value) = "lu" _ Or LCase(ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AV").Value) = "st" _ Or LCase(ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AV").Value) = "so") _ And LCase(ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AU").Value) = "union" Then ActiveWorkbook.Worksheets("SAP to ADP").Cells(lngRow, "AW").Value = "MATCH" End If End If Next