Условное форматирование с использованием кода Excel VBA

У меня есть объект Range, называемый DistinationRange который содержит ссылку на диапазон B3:H63

Я хочу применить следующие два условных правила форматирования, используя код Excel VBA динамически. (Потому что диапазон не будет одинаковым все время)

  1. Если столбец D столбца пуст, форматирование не должно применяться (необходимо использовать Stop If True)
  2. Если значение в ячейке столбца E меньше значения в ячейке столбца F, эта целая строка должна иметь зеленый фон.

Я много пробовал, используя запись, но она не записывается правильно.

Незлая помощь.

    Это даст вам ответ на ваш простой случай, но можете ли вы рассказать о том, как вы будете знать, какие столбцы нужно будет сравнивать (в данном случае B и C) и какой начальный диапазон (в данном случае – A1:D5 ) будет? Тогда я могу попытаться дать более полный ответ.

     Sub setCondFormat() Range("B3").Select With Range("B3:H63") .FormatConditions.Add Type:=xlExpression, Formula1:= _ "=IF($D3="""",FALSE,IF($F3>=$E3,TRUE,FALSE))" With .FormatConditions(.FormatConditions.Count) .SetFirstPriority With .Interior .PatternColorIndex = xlAutomatic .Color = 5287936 .TintAndShade = 0 End With End With End With End Sub 

    Примечание: это проверено в Excel 2010.

    Изменить: обновленный код, основанный на комментариях.

    Я думаю, что я только что нашел способ применить перекрывающиеся условия ожидаемым образом с помощью VBA. После нескольких часов работы с различными подходами я обнаружил, что сработало изменение диапазона «Применяется к» для правила условного формата после того, как каждый из них был создан!

    Это мой рабочий пример:

     Sub ResetFormatting() ' ---------------------------------------------------------------------------------------- ' Written by..: Julius Getz Mørk ' Purpose.....: If conditional formatting ranges are broken it might cause a huge increase ' in duplicated formatting rules that in turn will significantly slow down ' the spreadsheet. ' This macro is designed to reset all formatting rules to default. ' ---------------------------------------------------------------------------------------- On Error GoTo ErrHandler ' Make sure we are positioned in the correct sheet WS_PROMO.Select ' Disable Events Application.EnableEvents = False ' Delete all conditional formatting rules in sheet Cells.FormatConditions.Delete ' CREATE ALL THE CONDITIONAL FORMATTING RULES: ' (1) Make negative values red With Cells(1, 1).FormatConditions.add(xlCellValue, xlLess, "=0") .Font.Color = -16776961 .StopIfTrue = False End With ' (2) Highlight defined good margin as green values With Cells(1, 1).FormatConditions.add(xlCellValue, xlGreater, "=CP_HIGH_MARGIN_DEFINITION") .Font.Color = -16744448 .StopIfTrue = False End With ' (3) Make article strategy "D" red With Cells(1, 1).FormatConditions.add(xlCellValue, xlEqual, "=""D""") .Font.Bold = True .Font.Color = -16776961 .StopIfTrue = False End With ' (4) Make article strategy "A" blue With Cells(1, 1).FormatConditions.add(xlCellValue, xlEqual, "=""A""") .Font.Bold = True .Font.Color = -10092544 .StopIfTrue = False End With ' (5) Make article strategy "W" green With Cells(1, 1).FormatConditions.add(xlCellValue, xlEqual, "=""W""") .Font.Bold = True .Font.Color = -16744448 .StopIfTrue = False End With ' (6) Show special cost in bold green font With Cells(1, 1).FormatConditions.add(xlCellValue, xlNotEqual, "=0") .Font.Bold = True .Font.Color = -16744448 .StopIfTrue = False End With ' (7) Highlight duplicate heading names. There can be none. With Cells(1, 1).FormatConditions.AddUniqueValues .DupeUnique = xlDuplicate .Font.Color = -16383844 .Interior.Color = 13551615 .StopIfTrue = False End With ' (8) Make heading rows bold with yellow background With Cells(1, 1).FormatConditions.add(Type:=xlExpression, Formula1:="=IF($B8=""H"";TRUE;FALSE)") .Font.Bold = True .Interior.Color = 13434879 .StopIfTrue = False End With ' Modify the "Applies To" ranges Cells.FormatConditions(1).ModifyAppliesToRange Range("O8:P507") Cells.FormatConditions(2).ModifyAppliesToRange Range("O8:O507") Cells.FormatConditions(3).ModifyAppliesToRange Range("B8:B507") Cells.FormatConditions(4).ModifyAppliesToRange Range("B8:B507") Cells.FormatConditions(5).ModifyAppliesToRange Range("B8:B507") Cells.FormatConditions(6).ModifyAppliesToRange Range("E8:E507") Cells.FormatConditions(7).ModifyAppliesToRange Range("A7:AE7") Cells.FormatConditions(8).ModifyAppliesToRange Range("B8:L507") ErrHandler: Application.EnableEvents = False End Sub 
    Interesting Posts

    Что может привести к сложности алгоритма O (log n)?

    Приложение для группировки окон вместе

    Как разместить кеш SuperFetch на SSD?

    Где Internet Explorer сохраняет загруженные файлы, которые просто «открываются» в Windows 7?

    Проблемы с новой строкой в ​​Graphics2D.drawString

    Беспроводная сеть G / Wireless N / и ATA / проводной Ethernet

    Найти каталог / папку с CMD без знания полного пути

    VBScript: Каков самый простой способ форматирования строки?

    В чем разница между интерфейсами mini PCIe и mSATA и SSD?

    Развертывание идентичной настройки Windows на нескольких компьютерах

    Как вставить элемент после другого элемента в JavaScript без использования библиотеки?

    Загружать файл Scala в интерпретатор для использования функций?

    «Требуется Gradle Version 2.10». Ошибка

    получить строку с разделителями-запятыми из строк

    Почему я не могу переадресовать class объявления в пространстве имен, используя двойные двоеточия?

    Давайте будем гением компьютера.