Excel条件格式行背景,跳过具有现有手动格式的单元格

时间:2018-05-16 15:55:27

标签: excel excel-vba conditional-formatting vba

我希望看看是否有人能够将条件格式应用于行但跳过已经具有背景颜色的单元格。

我有一个电子表格,可以使用Get& amp ;;从SQL数据库中提取数据。转换为选项卡1.

然后,该数据将根据公共值与“工作表”选项卡中的现有数据合并。我以相同的列顺序获得两组数据。然后通过宏标志,通过将背景颜色更改为紫色,新数据从旧(工作表)数据更改的任何位置。我也把字体变粗。

这样做是为了在视觉上标记该单元格值自上次刷新数据以来已经改变。站出来。这是通过条件格式化完成的,其中新数据<>旧数据(D2<> CQ2然后使粗体紫色)。 这是第三个选项卡,然后是一个marco步骤,然后将值设置为显示的值。

For Each aCell In mySel
         With aCell
           .Font.FontStyle = .DisplayFormat.Font.FontStyle
           .Interior.Color = .DisplayFormat.Interior.Color
           .Font.Strikethrough = .DisplayFormat.Font.Strikethrough
           .Interior.Pattern = .DisplayFormat.Interior.Pattern
         End With
     Next aCell

然后删除现有的工作表数据&被新数据取代。一切正常。

在“工作表”选项卡上有一个单元格,用户可以在其中输入数字&通过条件格式化,整个行被更改为匹配设置为#的颜色。 (IE 1 =绿色,2 =黄色,3 =红色,......)

那么如果行已经具有这些设置之一(它在刷新过程中被复制)会发生什么呢?整个行现在是绿色,红色,黄色,。/ ..但是现在格式化为紫色的是已被行级条件格式替换。

我们想要发生的是将任何单个单元格保留为紫色,其余行可以是所选颜色。

简单地设置行级别指示符或标记某些内容已发生变化是不够的,因为数据跨越了A - BV列。

例如,这里是代码选择是否为1:

Selection.FormatConditions(1).StopIfTrue = False
    Range("A2:BV99999").Select
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$BS2 = 1"
    Selection.FormatConditions       (Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .ThemeColor = xlThemeColorAccent6
        .TintAndShade = 0.399914548173467
    End With

所以基本上我希望将上面的内容应用于行范围内的所有单元格,除了那些已经有背景颜色集的单元格。

最好在条件格式化语句中执行此操作,因此如果已经存在没有行级格式的紫色单元格,则用户将其设置为紫色单元格保持紫色而其他单元格更改为所选颜色。 / p>

这甚至可能吗?

(猜测我可能会逐个查看,如果它是粗体&删除条件格式&重新格式化为紫色,但对于A3..BV1000来说这个例子很慢)

2018年5月17日 我简化了一些事情。我需要应用GMalc建议的行条件格式的代码。 我试过了:

Selection.FormatConditions(1).StopIfTrue = False
    Range("A2:BV99999").Select
   ' Range("BZ2").Activate
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=$BS2 = 6"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    If Not Selection.Interior.Color = 153164535 Then 'have also tried vbLavender
    With Selection.FormatConditions(1).Interior
      '  .PatternColorIndex = 0
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = -0.249946592608417
      '  .PatternTintAndShade = 0
    End With
    End If

整行仍然格式化为浅灰色。如果我删除BS列中的6,则会出现Lavender背景。我已经尝试将IF NOT改为IF,即使单元格中没有着色,仍然会格式化整行。

所以这就是我需要让魔法发生的地方,将行中的所有细胞颜色调成所需的颜色,除非它是薰衣草然后不改变那些细胞的背景颜色。

1 个答案:

答案 0 :(得分:0)

使用Not aCell添加IF语句,您可能需要将vbMagenta更改为正确的颜色。

For Each aCell In mySel
    If Not aCell.Interior.Color = vbMagenta Then 'add this line
         With aCell    
           .Font.FontStyle = .DisplayFormat.Font.FontStyle
           .Interior.Color = .DisplayFormat.Interior.Color
           .Font.Strikethrough = .DisplayFormat.Font.Strikethrough
           .Interior.Pattern = .DisplayFormat.Interior.Pattern
         End With
    End If  'add this line
Next aCell