Фон строки условного форматирования Excel, пропустите ячейки с существующим ручным форматированием - PullRequest
0 голосов
/ 16 мая 2018

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

У меня есть электронная таблица, которая извлекает данные из базы данных 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 и все еще форматировать всю строку, даже если в ячейке нет окраски.

Так что это действительно то место, где мне нужно, чтобы волшебство произошло, закрасьте все ячейки в ряду до желаемого цвета, если только это не Лаванда, тогда не меняйте цвет фона этих ячеек.

1 Ответ

0 голосов
/ 16 мая 2018

Добавьте оператор IF с помощью Not aCell, возможно, вам придется изменить 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
...