1

Я пытаюсь написать коды VBA для условного форматирования (двухцветная шкала) ячейки A1 на основе ее значения между> = ячейка A2 и <= ячейка A3. Я использую ячейки A2 и A3, чтобы я мог изменить конкретный диапазон значений.

Например, если ячейка A2 равна 50, а ячейка A3 равна 1, измените цвет фона ячейки A1 с самого темного зеленого (самый высокий; ячейка A2; 50) на самый светлый зеленый (самый низкий; ячейка A3; 1) в зависимости от значения A1 - если не между 50 и 1, формат не требуется.


Я был в состоянии написать приведенный ниже код для аналогичного экземпляра (в модуле). Код ниже предназначен для заданного диапазона ячеек, и я хочу, чтобы для одной ячейки с меняющимися значениями.

Sub ColorChange()

Application.ScreenUpdating = False

    ' Fill a range with numbers from 1 to 25.
    Dim rng As Range
    Set rng = Range("A1:A25")

    Range("A1") = 1
    Range("A2") = 2
    Range("A1:A2").AutoFill Destination:=rng

    rng.FormatConditions.Delete

    'Add a 2-color scale.
    Dim cs As ColorScale
    Set cs = rng.FormatConditions.AddColorScale(ColorScaleType:=2)

    ' Format the first color as light green
    With cs.ColorScaleCriteria(1)
        .Type = xlConditionValueLowestValue
        With .FormatColor
            .Color = vbGreen
            ' TintAndShade takes a value between -1 and 1.
            ' -1 is darkest, 1 is lightest.
            .TintAndShade = 0.5
        End With
    End With

    ' Format the second color as dark green, at the highest value.
    With cs.ColorScaleCriteria(2)
        .Type = xlConditionValueHighestValue
        With .FormatColor
            .Color = vbGreen
            .TintAndShade = -0.5
        End With
    End With

Application.ScreenUpdating = True

End Sub

1 ответ1

0

Вам необходимо использовать метод "Worksheet_change", чтобы изменить форматирование при добавлении новых данных.

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.FormatConditions.Count = 0 Then
        <add your code here>
    End If
End Sub  

У меня нет большого опыта работы с условным форматированием в VBA. Возможно, создание нового условия при каждом добавлении данных приведет к тому, что при открытии меню условного форматирования появится множество групп форматирования. Чтобы сохранить его как одно форматирование, вам, возможно, потребуется всегда устанавливать форматирование для всего диапазона (set rng=Range("A1:A" & target.row)).

Бесплатное решение VBA: если вы преобразуете свои данные в таблицу (вставьте таблицу из EXCel 2007), тогда, когда пользователи добавят строки непосредственно под существующими данными, ваши формулы и условное форматирование также будут автоматически перенесены на новую строку.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .