如何处理循环列中的错误1004?

我试图使用这个代码来显示溢出到表格20170224-SUAGDBI中的另一个值。 但是我得到一个Error 1004关于行If Works....Value Then 。 有人可以帮我解决这个错误吗?

 Dim i As Long For i = 2 To Rows.Count If Worksheets("20170224-SUAGDB").Cells(i, 9).Value <> Worksheets("20170224-SUAGDB").Cells((i + 1), 9).Value Then Cells(i, 9).Font.Color = vbRed End If Next i 

您的一些对象不完全合格。 例如,获取Worksheets(“20170224-SUAGDB”)中“I”(9)列的最后一行。

试试下面的代码:

 Dim i As Long With Worksheets("20170224-SUAGDB") For i = 2 To .Cells(.Rows.Count, 9).End(xlUp).Row '<-- get last row in column "I" (column 9) If .Cells(i, 9).Value <> .Cells((i + 1), 9).Value Then .Cells(i, 9).Font.Color = vbRed End If Next i End With 

由于您尚未在Worksheet中select任何特定的Range() ,因此您的Rows.Count值等于1048576

你可以使用MsgBox Rows.Count来检查它的值。

所以,当你的循环从11048576 ,在最后一次迭代中,当你试图比较.Cells(i, 9).Value.Cells((i + 1), 9).Value ,第二项“爆炸”你的总行数!

您的代码查找行号1048577 – 哪些不存在 – 所以它会引发1004错误。

一个可能的解决scheme正在改

  • 这: For i = 2 To Rows.Count
  • 对此: For i = 2 To Rows.Count - 1

即使这些解决scheme不包含任何数据,该解决scheme仍将遍历all - 1行。

或者甚至可能:

  • 这: For i = 2 To Rows.Count
  • 为此: For i = 2 To Range("I:I").End(xlDown).Row - 1

此解决scheme获取所选列的最后一个非空行值。

PS。 如果你没有在For i = 2 To Range("I:I").End(xlDown).Row - 1 ,而你的工作表在行号1048576处包含一些数据,你的代码将会抛出相同的错误1004。