使用VBA进行条件格式化,通过引用另一个格式化格式来动态设置范围样式

时间:2014-08-31 16:13:25

标签: excel vba dynamic formatting conditional

这是我的问题。

enter image description here

因此,应用于范围K3:K10,我有几个不同的条件格式规则,需要一个特定的文本字符串,包含引用单元格的内容和一个常量文本字符串。每个规则为特定引用的单元格和常量文本字符串(DEAD或ALIVE)组合应用不同的颜色。例如,在该范围内,如果单元格包含单词“Dog”,然后是空格,然后单词“Dead”,则将其格式化为Red。列DE中的图例显示了标准组合(动物和死亡/活着)对每种动物适用的颜色。我想要做的是,能够在列C中使用下拉列表为动物选择颜色,并让CF更改K3:K10范围内任何单元格的格式在特定规则为真时匹配列C中相关行的格式/样式。

因此,如果K3为“Dog Dead”,则应用与单元格D3中相同的格式,或者如果它是“Dog Alive”,则应用与E3相同的格式。我不想让CF让任何包含“Dog Dead”红色或“Dog Alive”的细胞呈红色,因为狗的颜色可能不是红色。它可以是绿色或蓝色。

所以,我想我想用VBA实现动态条件格式化。有人可以帮助我开始吗?

谢谢,

安迪。

1 个答案:

答案 0 :(得分:0)

起点!!
在Sheet事件中:

Private Sub Worksheet_Change(ByVal Target As Range)
    ApplyCond Range("K" & Target.Row)
End Sub

在一个模块中:

Public Sub ApplyCond(xx As Range)
    If xx.Value = "" Then Exit Sub
    xx.FormatConditions.Delete
    xx.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
        Formula1:=xx.Value
    kk = Split(xx.Value)
    a = -1
    b = -1
    For i = LBound(kk) To UBound(kk)
        Select Case kk(i)
        Case "Dead": a = 4
        Case "Alive": a = 5
        Case Else
            For e = 3 To 9999
                If Range("B" & e).Value = "" Then Exit For
                If Range("B" & e).Value = kk(i) Then
                    b = e
                End If
            Next
        End Select
    Next

    ' Apply Format
    On Error Resume Next
    If (a > 0) And (b > 0) Then
        With xx.FormatConditions(1).Interior
            .PatternColorIndex = Cells(b, a).Interior.PatternColorIndex
            .Color = Cells(b, a).Interior.Color
            .TintAndShade = Cells(b, a).Interior.TintAndShade
            .Pattern = Cells(b, a).Interior.Pattern
            .PatternThemeColor = Cells(b, a).Interior.PatternThemeColor
            .ThemeColor = Cells(b, a).Interior.ThemeColor
            .PatternTintAndShade = Cells(b, a).Interior.PatternTintAndShade
        End With
        With xx.FormatConditions(1).Font
            .Bold = Cells(b, a).Font.Bold
            .Italic = Cells(b, a).Font.Italic
            .Underline = Cells(b, a).Font.Underline
            .Strikethrough = Cells(b, a).Font.Strikethrough
            .ThemeColor = Cells(b, a).Font.ThemeColor
            .TintAndShade = Cells(b, a).Font.TintAndShade
            .Color = Cells(b, a).Font.Color
            .TintAndShade = Cells(b, a).Font.TintAndShade
        End With
    End If
End Sub

您需要验证拆分公式。使用LCase功能或其他过滤器可能更好 在我的功能中,我不会使用专栏" C"。