Я проверяю, смог ли кто-нибудь применить условное форматирование к строке, но пропустить ячейки, которые уже имеют цвет фона.
У меня есть электронная таблица, которая извлекает данные из базы данных SQL, используя Get & Transform, на вкладку 1.
Эти данные затем объединяются с существующими данными на вкладке «Рабочий лист» на основе общего значения. Я получаю оба набора данных в одном и том же порядке столбцов, а затем с помощью макро-флага, где новые данные изменились по сравнению со старыми данными (рабочей таблицы), изменив цвет фона на фиолетовый. Я также делаю шрифт жирным шрифтом.
Это сделано, чтобы визуально пометить, что это значение ячейки изменилось с момента их последнего обновления данных и выделилось. Это делается с помощью условного форматирования, когда новые данные <> старые данные (D2 <> CQ2 затем выделяются жирным фиолетовым цветом).
Это сопоставляется с 3-й вкладкой, а затем выполняется шаг 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 = красный, ...)
Так что же произойдет, если строка уже имеет одну из этих настроек (она копируется во время процесса обновления), если вся строка теперь зеленая, красная, желтая, ./ ... но то, что было отформатировано как Purple, теперь заменено условным форматированием на уровне строк.
То, что мы хотим сделать, - это оставить любые отдельные ячейки отформатированными как фиолетовые, а остальная часть строки может быть выбранного цвета.
Простая установка индикатора уровня строки или флага, что что-то изменилось, будет недостаточной, поскольку данные охватывают столбцы 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
Так что в основном я хочу применить вышеупомянутое ко всем ячейкам в диапазоне строк, кроме тех, у которых уже установлен цвет фона.
Было бы предпочтительно сделать это в операторе условного форматирования, чтобы, если уже была фиолетовая ячейка без форматирования на уровне строк, если пользователи затем устанавливают это, фиолетовая ячейка остается фиолетовой, в то время как остальные меняют на выбранный цвет.
Это вообще возможно?
(возможно, я мог бы смотреть ячейку за ячейкой, если она выделена жирным шрифтом, удалить условное форматирование и переформатировать как Purple, но это медленно для A3..BV1000 в качестве примера)
17 мая 2018 г.
Я немного упростил вещи. То, где я должен применить то, что предлагает 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
Весь ряд по-прежнему отформатирован как светло-серый. Если я удалю 6 в столбце BS, появится фон Лаванда. Я попытался изменить значение IF NOT на IF и все еще форматировать всю строку, даже если в ячейке нет окраски.
Так что это действительно то место, где мне нужно, чтобы волшебство произошло, закрасьте все ячейки в ряду до желаемого цвета, если только это не Лаванда, тогда не меняйте цвет фона этих ячеек.