Excel行着色超出了使用范围

时间:2018-10-17 13:09:25

标签: excel vba

lemme首先显示一段代码

For Each cell In selRng.Cells
    If InStr(cell.value, "_cb") Then
        cell.EntireRow.Interior.Color = RGB(0, 200, 0)
    End If
    If InStr(cell.value, "_mou") Then
        cell.EntireRow.Interior.Color = RGB(0, 200, 0)
    End If
    If InStr(cell.value, "_ebp") Then
        cell.EntireRow.Interior.Color = RGB(0, 200, 0)
    End If
Next cell

此代码的全部作用是检查单元格中字符串的末尾是否包含这三个子字符串中的任何一个,然后将白色行着色为绿色。

问题来自以下事实:该行的颜色将超出使用范围,我尝试删除最后使用的多余行,但无济于事,总是在最后一行保留一行绿线溢出的工作表。

它看起来像这样:

Green Lines Spilling

我知道必须有一种解决方法,但是我似乎无法找到代码到底有什么问题。

2 个答案:

答案 0 :(得分:2)

要将其限制为使用范围(并不总是准确的),可以使用:

Intersect(cell.EntireRow, cell.worksheet.usedrange).Interior.Color = RGB(0, 200, 0)

此外,您实际上并不需要三个If语句,只需一个,因为每次的颜色相同:

If InStr(cell.value, "_cb") Or InStr(cell.value, "_mou") or InStr(cell.value, "_ebp") Then

答案 1 :(得分:0)

如果在所有情况下最后一列始终为“ CB”,则可以使用:

Range("A" & cell.Row & ":CB" & cell.Row).Interior.Color = RGB(0, 200, 0)

但是,如果最后一列不是固定的,则可以使用:

If InStr(cell.Value, "_cb") Or InStr(cell.Value, "_mou") Or InStr(cell.Value, "_ebp") Then
    LastColumn = Worksheets("Data").Cells(cell.Row, Worksheets("Data").Columns.Count).End(xlToLeft).Column
    Range(Cells(cell.Row, 1), Cells(cell.Row, LastColumn)).Interior.Color = RGB(0, 200, 0)
End If