Условное форматирование для всего листа - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь превратить любую ячейку, которая соответствует заданному значению, в цвет.

Если значения ячеек:

  • S-DAYS, C -DAYS, DAYS, то ячейка станет СИНИЙ с черным текстом
  • E SWING, SE SWING, C -E SWING станет зеленым с черным текстом
  • L SWING, SL SWING, C -L SWING будет светло-фиолетовым с черным текстом
  • LATES, S -LATES, C -LATES он станет серым с черным текстом
  • AOT станет желтым с черным текстом
  • VA C, OUT, MIL, TRAIN превратит ячейку в ЧЕРНЫЙ с белым текстом

Я записал следующее. Как мне сделать так, чтобы он автоматически применялся к листу без запроса?

Sub DAConditionalFormating()
'
' DAConditionalFormating Macro
'

'
    Range("D14:XFD999").Select

    Selection.FormatConditions.Add Type:=xlTextString, String:="DAYS", _
        TextOperator:=xlContains
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 15773696
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Selection.FormatConditions.Add Type:=xlTextString, String:="E SWING", _
        TextOperator:=xlContains
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .Color = 5296274
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Selection.FormatConditions.Add Type:=xlTextString, String:="LATES", _
        TextOperator:=xlContains
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = -0.249946592608417
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Selection.FormatConditions.Add Type:=xlTextString, String:="VAC", _
        TextOperator:=xlContains
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Font
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = 0
    End With
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
End Sub

1 Ответ

1 голос
/ 13 февраля 2020

Применение условного форматирования ко всему листу - действительно очень плохая идея. Расчет будет срабатывать каждый раз, когда вы редактируете ЛЮБУЮ ячейку на листе.

Вместо условного форматирования всего листа используйте код для форматирования только ячейки, которая была только что изменена. Отформатируйте заливку ячейки и шрифт.

Запустите этот код в событии Worksheet_Change в модуле Sheet и дайте ему работать в целевой ячейке. Тогда он будет работать быстро и изменит только ячейку, которая была только что изменена.

Примерно так. Добавьте больше ElseIF по мере необходимости. Код поступает в модуль Sheet листа.

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Value = "foo" Then
    With Target.Interior
        .PatternColorIndex = xlAutomatic
        .Color = 15773696
        .TintAndShade = 0
    End With
ElseIf Target.Value = "bar" Then
    With Target.Interior
        .PatternColorIndex = xlAutomatic
        .Color = 5296274
        .TintAndShade = 0
    End With
End If

End Sub
...