用一个条件改变表格行的颜色。

问题描述 投票:0回答:1

我想写一个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

excel vba rows rgb conditional-formatting
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.