Как поставить условное форматирование в выделенную ячейку? - PullRequest
0 голосов
/ 04 мая 2020

Условное условие форматирования: если выбранная ячейка ("cel7") не пуста, тогда поместите в нее черную заливку. Как я могу изменить мой текущий код так, чтобы условие условного форматирования использовалось в cel7. Я попытался использовать xlnoblankscondition, но я не смог найти примеры VBA в Интернете. PS: Поскольку я записал все ячейки cel7 как C1, каждое условие будет истинным ie НЕ ПУСТО.

x = ws.Range("A4").Value
y = ws.Range("A5").Value
ocol = 4
Set cel = Range("E6")
Set cel7 = cel.Offset(2, 0)
For m = 1 To x
For o = 1 To y
        cel7.Value = "C1"
         cel7.Select
            With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        End With
        Set cel7 = cel7.Offset(4, 0)
        Next
Set cel = cel.Offset(0, ocol)
Set cel7 = cel7.Offset(0, ocol)
Next

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Извините, поскольку я до сих пор не понимаю, что вы имеете в виду.

В любом случае, я предполагаю, что вы хотите кодировать условное форматирование, как если бы вы делали это вручную.

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

Sub test()
    Cells.FormatConditions.Delete
    cel7.Select
    cf = cel7.Address(0, 0)

    Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=NOT(ISBLANK(" & cf & "))"
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Font
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = 0
    End With
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
    End With
    Selection.FormatConditions(1).StopIfTrue = False
    Application.WindowState = xlMaximized
End Sub

Я пробую код выше, имея переменную cel7, ссылающуюся на ячейку D10. После запуска кода, если я что-то наберу в ячейке D10, D10 заполняет черный шрифт белым цветом. Если я очищаю содержимое D10, D10 возвращается в нормальное состояние (без заполнения).

Также я пытаюсь установить переменную cel7 в диапазоне от D2 до D10. Если я наберу на любой ячейке в D2: D10, ячейка заполнится черным с белым шрифтом. Если я уберу это, ячейка вернется в нормальное состояние.

Но еще раз, может быть, это не то, чего вы хотите достичь.

Если я не ошибаюсь, прочитайте ваш код, похоже, что ваш Форматирование cel7 - это незаразная строка. Поэтому, пожалуйста, попробуйте ваш oop как этот:

Cells.FormatConditions.Delete 'put this line before m loop
For m = 1 To x
    For o = 1 To y
        Cel7.Select
        cf = Cel7.Address(0, 0)

        Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
            "=NOT(ISBLANK(" & cf & "))"

        Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
        With Selection.FormatConditions(1).Font
            .ThemeColor = xlThemeColorDark1
            .TintAndShade = 0
        End With
        With Selection.FormatConditions(1).Interior
            .PatternColorIndex = xlAutomatic
            .ThemeColor = xlThemeColorLight1
            .TintAndShade = 0
        End With
        Selection.FormatConditions(1).StopIfTrue = False
        Application.WindowState = xlMaximized

        Set Cel7 = Cel7.Offset(4, 0)
    Next o
1 голос
/ 04 мая 2020

В приведенном ниже коде я вынул ваш выбор Cel7. Вы можете обратиться к диапазону напрямую. Я также добавил объявления переменных. Отказ от них вызывает больше работы, чем экономит. В остальном цвет ячейки применяется, если ячейка не равна Empty.

Sub Macro1()

    Dim Ws As Worksheet
    Dim Cel As Range, Cel7 As Range
    Dim Tmp As Variant
    Dim oCol As Long
    Dim x As Long, y As Long
    Dim m As Long, o As Long

    Set Ws = ActiveSheet
    x = Ws.Range("A4").Value
    y = Ws.Range("A5").Value
    oCol = 4

    Set Cel = Ws.Range("E6")
    Set Cel7 = Cel.Offset(2, 0)
    For m = 1 To x
        For o = 1 To y
            With Cel7
                Tmp = "C1"          ' avoid read/write to  sheet multiple times
                .Value = Tmp
                If IsEmpty(Tmp) Then
                    .Interior.Pattern = xlNone
                Else
                    .Interior.Color = vbBlack
                End If

                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlCenter
            End With
            Set Cel7 = Cel7.Offset(4, 0)
        Next o
        Set Cel = Cel.Offset(0, oCol)
        Set Cel7 = Cel7.Offset(0, oCol)
    Next m
End Sub
.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...