Excel 如何处理循环通过列中的错误1004?
我正试图使用此代码在工作表Excel 如何处理循环通过列中的错误1004?,excel,vba,Excel,Vba,我正试图使用此代码在工作表20170224-SUAGDB的I列中显示溢出到另一个值。但是我得到一个关于行的错误1004,如果有效…那么值。有人能帮我纠正这个错误吗 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
20170224-SUAGDB
的I
列中显示溢出到另一个值。但是我得到一个关于行的错误1004
,如果有效…那么值。有人能帮我纠正这个错误吗
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
Dim i尽可能长
对于i=2到行。计数
如果工作表(“20170224-SUAGDB”)。单元格(i,9)。对工作表(“20170224-SUAGDB”)。单元格(i+1,9)进行赋值,则
单元格(i,9)。Font.Color=vbRed
如果结束
接下来我
由于您没有。请在工作表中选择任何特定的范围()
,您的行。Count
值等于1048576
您可以使用MsgBox Rows.Count
检查它的值
因此,当您的循环从1
到1048576
,在上一次尝试比较.Cells(i,9).Value
与.Cells((i+1),9).Value
的迭代中,第二项“分解”了您的总行数
您的代码查找行号1048577
,但行号不存在,因此会抛出1004
错误
一种可能的解决办法是改变:
- 这:
对于i=2到行。计数
- 对此:
对于i=2到行。计数-1
此解决方案将循环通过所有-1
行,即使它们不包含任何数据
甚至可能:
- 这:
对于i=2到行。计数
- 对此:
对于i=2到范围(“i:i”)。结束(xlDown)。行-1
此解决方案获取所选列的最后一个非空行值
ps.如果您在中不为i=2添加-1
,则i=2到范围(“i:i”).End(xlDown)。行-1
,并且您的工作表在行号1048576
处包含一些数据,则您的代码将抛出相同的错误1004。您的某些对象未完全限定。例如,获取“工作表”(“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
Dim i尽可能长
带工作表(“20170224-SUAGDB”)
对于i=2到.Cells(.Rows.Count,9).End(xlUp).Row“在循环运行一次之前是否出现该错误?”根据其他工作表的值在当前工作表上设置单元格颜色可能是有意的。除了那条线之外,所有其他对象似乎都是完全限定的。无论如何,我不认为这会导致这个错误。根据@dot.Py的答案,引用大于总行数的行号可以;我想这就是问题所在。@SantiBailors我想PO更可能是想看看smae手册。如果您得到最后一个被占用的行号,您根本不会遇到此错误。很抱歉,此答案偏离轨道,不应将其标记为已接受。不管其中的代码是否有效(如果最后一行不是空的,我认为不会),它声明错误的原因就是错误的。未完全限定的对象与错误无关。错误的原因是dot.Py的答案中提到的,以及OP工作中提到的相关解决方案。非常感谢。但实际行数是165000。因此,循环需要一段时间,然后在循环后会弹出错误。您有165000
行,因此代码行。Count
将返回1048576
,代码范围(“I:I”)。End(xlDown)。Row
将返回165000
。使用第二种方法进行测试,您会发现执行时间有所不同。顺便说一句,你用-1
测试过代码吗?是的,-1工作得更好。实际上,我想将找到的值(现在变为红色)粘贴到新的工作表中。但是代码再次爆炸。。