我正在尝试编写一个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在链接的图像中,您可以看到预期的结果

发布于 2020-06-13 02:19:30
正如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-clause中定义的对象(工作表)。不要依赖于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 Withhttps://stackoverflow.com/questions/62348028
复制相似问题