Сбой цикла условного формата vba

У меня есть этот код, который почти работает:

Sub condFormat()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
    ws.Columns("B:B").FormatConditions.Delete
    ws.Columns("B:B").FormatConditions.Add Type:=xlExpression, Formula1:="=LEN(B1)>100"
    ws.Columns("B:B").FormatConditions(1).Interior.ColorIndex = 3
Next
End Sub

Но это не будет обновлять фактическую ячейку должным образом.

Я в конечном итоге с такими вещами, как:

=LEN(B65517)>100

в столбце В клетки.

Как я могу изменить это, чтобы ссылаться на правильные ячейки в столбце B?

Любая помощь приветствуется.

2 ответа

Решение

В итоге я просто сделал цикл, так как не мог заставить его работать другим способом:

Sub condFormat()
Application.ScreenUpdating = False
Dim ws As Worksheet
Dim myRange As Range, c As Range
For Each ws In ActiveWorkbook.Worksheets
    ws.Activate
    ws.Columns("B:B").FormatConditions.Delete
    Set myRange = Range("B2", Cells(Rows.Count, "B").End(xlUp))
    For Each c In myRange
    If Len(c) > 100 Then c.Interior.ColorIndex = 3
    Next
Next
Application.ScreenUpdating = True
End Sub

Ссылки на ячейки могут быть смещены в зависимости от выбранной ячейки.

Вы можете добавить абсолютную ссылку на столбец B:

ws.Columns ("B: B"). FormatConditions.Add Тип:=xlExpression, Formula1:="=LEN($B1)>100"

Но самый простой способ - это явно выбрать ячейку, вероятно, A1:

ws.Activate

ws.Cells (1, 1). Выбрать

Вот ссылка от Microsoft, объясняющая проблему.

Другие вопросы по тегам