Я изо всех сил пытаюсь найти элегантный способ применения условных правил форматирования через VBA. Я предпочитаю VBA, потому что: а) правила будут применяться к нескольким листам и б) он предотвращает проблему дублирования CF при копировании/вставке между рабочими листами.Условное форматирование VBA
У меня есть список предметов инвентаризации, которые хранятся в разных местах. Я хочу отформатировать на основе местоположения со следующим форматированием:
Цвет шрифта (изменится для каждого местоположения); Верхняя граница (тот же цвет, что и шрифт); Нижняя граница (тот же цвет, что и шрифт)
Кроме того, диапазон должен быть динамическим, чем для каждого листа, он применяется к таблице на этом листе. Я хотел бы применить один и тот же код к каждому применимому листу, вместо того, чтобы жестко закодировать имя таблицы для каждого рабочего листа.
Любая помощь была бы принята с благодарностью.
--UPDATE-- Я пытался адаптировать код J_V в here, но получить «ошибку времени выполнения„5“: Недопустимый вызов процедуры или аргумент» на Общественные подлодки r.FormatConditions.Add Type:=xlExpression, Formula1:=formula
. Я не уверен, что последний бит на границах правильный, поскольку время выполнения останавливает макрос. Мне также нужно работать в динамических табличных ссылках, но я работаю по одной проблеме за раз.
Sub ConditionalFormatting()
Dim myRange As Range
Set myRange = ThisWorkbook.Sheets("Widget1").Range("Widget1_table[Location]")
myRange.FormatConditions.Delete
Call FormatRange(myRange, 10, "=$E5="Warehouse1")
Call FormatRange(myRange, 11, "=$E5="Warehouse2")
Call FormatRange(myRange, 13, "=$E5="Warehouse3")
End Sub
Public Sub FormatRange(r As Range, color As Integer, formula As String)
r.FormatConditions.Add Type:=xlExpression, Formula1:=formula
r.FormatConditions(r.FormatConditions.Count).Font.colorindex = color
With r.FormatConditions(1).Borders(xlTop)
.LineStyle = xlContinuous
.Color = color
.TintAndShade = 0
.Weight = xlThin
End With
With r.FormatConditions(1).Borders(xlBottom)
.LineStyle = xlContinuous
.Color = color
.TintAndShade = 0
.Weight = xlThin
End With
r.FormatConditions(1).StopIfTrue = False
End Sub
Я бы начал с записи макроса, который применяет CF к одной таблице. Затем разверните его, прокручивая каждый лист в книге и, при необходимости, каждый список (таблица) в этих листах. –
Это * серьезно * плохая идея, чтобы назвать ваши переменные такими же, как зарезервированные слова свойств коллекции. 'Formula1: = formula' не рекомендуется, но' .Color = color' просто неверно. – Jeeped
Спасибо за то, что вы подняли головы, я переименую переменные. – Joe