【发布时间】:2015-12-22 05:46:48
【问题描述】:
我编写了一个非常简单的循环,它遍历表格列并将负值着色为红色,正值着色为绿色并删除空行。
删除行时会出现问题。我更新了RowCount 的值,并补偿i 以再次检查同一行,因为刚刚删除了一行。如果我有一列有 10 行,其中 2 行是空的,它们将被删除。我希望For i = 1 to RowCount 会在 8 处停止,但它会继续到 9 并产生错误,因为它随后会尝试删除不存在的第 9 行。
我需要做什么才能使循环在 8 处停止而不是继续(我假设 RowCount 的初始值。
Sub ColourFilledCells()
Dim Table1 As ListObject
Set Table1 = ThisWorkbook.Worksheets(1).ListObjects(1)
Dim i As Lon, RowCount As Long
RowCount = Table1.ListRows.Count
For i = 1 To RowCount
If Not Table1.DataBodyRange(i, 1) = Empty Then
With Table1.DataBodyRange(i, 1)
If .Value < 0 Then
.Interior.Color = RGB(255, 0, 0)
ElseIf .Value > 0 Then
.Interior.Color = RGB(0, 255, 0)
Else
.ColorIndex = 0
End If
End With
ElseIf Table1.DataBodyRange(i, 1) = Empty Then
Table1.ListRows(i).Delete
RowCount = RowCount - 1
i = i - 1
End If
Next i
End Sub
【问题讨论】:
-
只需向后循环
For i =RowCount to 1 step -1并去掉ElseIf中的两个计数器 -
①使用条件格式来实现你的
.Interior.Color颜色变化。 ② 要删除填充,请使用.Interior.Pattern = xlNone而不是.Interior.ColorIndex = 0③ 请参阅this 以缩短删除行所需的时间。 -
@Jeeped,谢谢,1,会更容易,但我不希望颜色在按下按钮时改变。 2,对此一无所知:) 3. 我一直在玩 Fadi 的解决方案,现在我只是使用循环来创建在循环外根据需要着色/删除的范围。