У меня есть макрос условного форматирования таблицы (спасибо Jeeped), который я бы хотел расширять, чтобы циклически перебирать все таблицы в диапазоне рабочих листов. Я подозреваю, что это не самый эффективный подход, но лучше всего я мог бы сгребаться вместе, и даже тогда он не работает. До сих пор я застрял в двух точках ниже. Любая помощь очень ценится!VBA - Перемещение по всем объектам ListObject по целому диапазону рабочих таблиц
1) Установка WS на равные многократные кодовыми рабочего листа (например, Set ws = Worksheets(5,6,7)
)
2) Установка диапазона ж/оа ошибки времени выполнения Set myRange = ws.ListObjects.DataBodyRange
производит «Ошибка выполнения„438“: Объект не поддерживает это свойство или метод»
Текущий код:
Sub ConditionalFormatting()
Dim ws As Excel.Worksheet
Dim lo As Excel.ListObject
Dim myRange As Range
Set ws = Worksheet(5) 'Would like to expand to include multiple worksheets!
Set myRange = ws.ListObjects.DataBodyRange
For Each lo In ws.ListObjects
With lo.FormatConditions
.FormatConditions.Delete
Call FormatRange(myRange, 10, "$E5=INDEX(Location,1,1)") 'Warehouse1
Call FormatRange(myRange, 10, "$E5=INDEX(Location,2,1)") 'Warehouse2
Call FormatRange(myRange, 10, "$E5=INDEX(Location,3,1)") 'Warehouse3
End With
Next lo
End Sub
Public Sub FormatRange(r As Range, clr As Integer, frml As String)
r.FormatConditions.Add Type:=xlExpression, Formula1:=frml
r.FormatConditions(r.FormatConditions.Count).Font.colorindex = clr
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
Спасибо Тим. Этот код работает, но только частично. В моем фактическом файле у меня много листов в массиве - не только три. Код отлично работает для некоторых листов в массиве, применяет форматирование, но не удаляет существующие условия форматирования для других и не применяет форматирование или удаление существующих условий форматирования для других. Чтобы заставить его работать в ближайшем будущем, я использовал 'Set ws = ActiveSheet' и работал на каждом рабочем листе, который работал. Не знаю, почему он обрабатывает рабочие листы по-разному. – Joe