Если ячейка font = red, выделите ячейку, используя проблемы VBA - PullRequest
0 голосов
/ 06 февраля 2020

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

Этот код делает определенные c ячейки жирным шрифтом:

Sub Highlight()
'
' Highlight good values

Application.ScreenUpdating = False

Dim ws As Worksheet, LC As Long

For Each ws In ActiveWorkbook.Worksheets
    LC = ws.Cells(18, ws.Columns.Count).End(xlToLeft).Column

    With ws.Range(ws.Cells(18, 3), ws.Cells(79, LC))
            .FormatConditions.Add Type:=xlCellValue, Operator:=xlNotBetween, _
                Formula1:="=$C18", Formula2:="=$D18"
            .FormatConditions(Range(ws.Cells(18, 3), ws.Cells(79, LC)).FormatConditions.Count).SetFirstPriority
            With .FormatConditions(1).Font
                .Bold = True
                .Color = vbRed
                .TintAndShade = 0
            End With

    End With

    Next ws

Application.ScreenUpdating = True

End Sub

Этот код пытался выделить ячейки красным шрифтом, но он не меняет цвет ячеек - он не работает

Sub cell_red()

Dim ws As Worksheet, LC As Long

For Each ws In ActiveWorkbook.Worksheets
LC = ws.Cells(18, ws.Columns.Count).End(xlToLeft).Column
    For Each cell In ws.Range(ws.Cells(18, 3), ws.Cells(79, LC))

        If cell.Font.Color = vbRed Then
            cell.Interior.ColorIndex = 44
        End If

    Next

Next ws

End Sub

This may help:
https://answers.microsoft.com/en-us/msoffice/forum/all/conditional-formatting-ignoring-blank-cells/719f087c-5e30-4830-9b7d-0b93cffad357

not sure how to incorporate it though

1 Ответ

0 голосов
/ 06 февраля 2020

Обязательно ли вы используете Conditional Formatting или вы открыты для других предложений? Когда я читал ваш пост (перед тем, как посмотреть примеры кода), я кое-что задумал.

Мне не нравится заниматься условным форматированием; пара небольших изменений на листе, и одно созданное вами правило в итоге становится набором из 5-6 правил, применяемых к меньшим диапазонам. Поэтому мне обычно нравится, когда al oop делает все форматирование для меня.

С учетом всего сказанного, скажем, мы перебираем столбец A:

For i = 2 to iLastRow (or whatever, 200, etc.)

  [ws].range("A" & i).interior.color = 16777215 'changing it to 'no fill' (in case it was colored before)

  If [ws].range("A" & i) [rest of the condition] Then
        [ws].range("A" & i).Interior.Color = [color no.]
  end if

next i

Это .Interior.Color также работает с .Cells(x,y). Конечно, он не будет динамически меняться при каждом изменении содержимого листа, но А) я обнаружил, что это дало мне меньше головной боли, чем условное форматирование, и Б) Вы можете поместить это форматирование l oop в другой Sub, который ваши основные Sub всего Call s, и добавьте кнопку, чтобы активировать только эту подпрограмму форматирования, чтобы вы могли в любое время вручную применить условное форматирование. Или вы можете добавить этот код форматирования в Sub Worksheet_OnChange.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...