如何处理循环列中的错误1004?
我试图使用这个代码来显示溢出到表格20170224-SUAGDB
列I
中的另一个值。 但是我得到一个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
来检查它的值。
所以,当你的循环从1
到1048576
,在最后一次迭代中,当你试图比较.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。