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

时间:2017-04-04 10:30:30

标签: excel vba

我正在尝试使用此代码在工作表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

2 个答案:

答案 0 :(得分:2)

由于您.select'ed中未Range() WorksheetRows.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