Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何处理循环通过列中的错误1004?_Excel_Vba - Fatal编程技术网

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工作得更好。实际上,我想将找到的值(现在变为红色)粘贴到新的工作表中。但是代码再次爆炸。。