根据条件更改表行的颜色

时间:2020-06-12 16:00:08

标签: excel vba rows rgb conditional-formatting

如果单元格的内容与之前的单元格不同,我正在尝试编写VBA来更改表行的颜色(两个不同的颜色之间)。 第n行。 3必须具有此颜色:RGB(221,245,253),而另一种颜色是白色。 我不知道哪一个是逻辑代码,以及如何在不更改字体颜色的情况下更改单元格的背景颜色。

Public Sub Overview()

Dim Ovtask As String
Dim Ovn, Ovi As Integer

Ovn = Range("B2").CurrentRegion.Rows.Count

Range("B3:C3").Font.Color = RGB(221, 245, 253)
For Ovi = 3 To Ovn + 1
Ovtask = Range("B" & Ovi)
    If Range("B" & Ovi + 1) = Ovtask Then
        Range("B" & Ovi + 1 & ":" & "C" & Ovi + 1).Font.Color = Range("B" & Ovi & ":" & "C" & Ovi).Font.Color
        Else
        Range("B" & Ovi + 1 & ":" & "C" & Ovi + 1).Font.Color = RGB(0, 0, 0)
    End If
Next Ovi
End Sub

在链接的图像中,您可以看到所需的结果 enter image description here

1 个答案:

答案 0 :(得分:0)

如BigBen在注释中所述,要设置单元格的颜色,请使用Interior.Color。我考虑过条件格式,但是我认为您是对的,在这种情况下是不可能的。

您在代码中使用的逻辑是有缺陷的:一旦将行设置为白色,就永远不会将任何行设置为蓝色:要么下一行相等,然后将其设置为白色,因为当前行是白色,或不相等,则无论如何都将其设置为白色。

请看下面的代码片段:我声明了一个布尔变量UseHighlightColor,该变量跟踪当前行是否需要被涂成蓝色,并相应地设置Interior.Color。颜色说明:
-白色为RGB(255, 255, 255)RGB(0, 0, 0)变成黑色。
-您可以使用预定义的常量vbWhite
-要将单元设置为透明而不是白色,可以使用ColorIndex = xlNone

以及对代码的说明:您使用的Range不合格,因此VBA自动引用ActiveSheet(当前具有焦点的工作表)。这并不总是与您一起使用的工作表。在我的示例中,我已经写了With ActiveSheet,但是您可以轻松地更改它,以便代码使用所需的工作表,例如ThisWorkbook.Sheets(1)。在With内部,我使用语法.Range(以.开头),这告诉VBA使用在With子句中定义的对象(工作表)。不要依赖ActiveSheet(也不要使用Activate)。

With ActiveSheet
    Ovn = .Range("B2").CurrentRegion.Rows.Count

    Dim useHighLightColor As Boolean
    useHighLightColor = True

    For Ovi = 3 To Ovn + 1
        Dim currentCell As Range
        Set currentCell = .Range("B" & Ovi)
        If useHighLightColor Then
            currentCell.Resize(1, 2).Interior.Color = RGB(221, 245, 253)
        Else
            ' curentCell.Resize(1, 2).Interior.Color = vbWhite
            currentCell.Resize(1, 2).Interior.ColorIndex = xlNone
        End If

        If currentCell <> currentCell.Offset(1, 0) Then
            ' Switch color
            useHighLightColor = Not useHighLightColor
        End If
    Next Ovi
End With