我正在尝试使用此代码在工作表I
的列20170224-SUAGDB
中显示溢出到另一个值。但我收到关于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
答案 0 :(得分:2)
由于您.select'ed
中未Range()
Worksheet
,Rows.Count
的{{1}}值等于1048576
。
您可以使用MsgBox Rows.Count
检查其值。
因此,当您的循环从1
转到1048576
时,在您尝试将.Cells(i, 9).Value
与.Cells((i + 1), 9).Value
进行比较的最后一次迭代中,第二个术语&#34;爆炸&#34;你的总行数!
您的代码会查找行号1048577
- 它不存在 - 因此会引发1004
错误。
一种可能的解决方案正在改变:
For i = 2 To Rows.Count
For i = 2 To Rows.Count - 1
此解决方案将循环显示all - 1
行,即使它们不包含任何数据。
或者甚至可能:
For i = 2 To Rows.Count
For i = 2 To Range("I:I").End(xlDown).Row - 1
此解决方案获取所选列的最后一个非空行值。
ps。如果您未在- 1
中添加For i = 2 To Range("I:I").End(xlDown).Row - 1
,并且您的工作表中包含行号1048576
的一些数据,那么您的代码将抛出相同的错误1004。
答案 1 :(得分:0)
您的某些对象不完全合格。例如,在`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