Excel VBA - Formata condicionalmente uma célula usando uma escala de 2 cores baseada em 2 valores (max / min) em outras células

1

Estou tentando gravar códigos VBA para formatar condicionalmente (escala de 2 cores) a célula A1 com base em seu valor que entre é > = célula A2 e < = célula A3. Estou usando as células A2 e A3 para poder alterar o intervalo de valores específico.

Por exemplo, se a célula A2 for 50 e a célula A3 for 1, altere a cor de segundo plano da célula A1 do verde mais escuro (maior; célula A2; 50) para verde mais claro (menor; célula A3; 1) dependendo do valor de A1 não entre 50 e 1, nenhum formato é necessário.

Consegui escrever o código abaixo para uma instância semelhante (em um módulo). O código abaixo é para um determinado intervalo de células e o que eu quero é para uma única célula com valores variáveis.

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
    
por EA1234 14.06.2015 / 05:08

1 resposta

0

Você precisa usar o método "Worksheet_change" para alterar a formatação quando novos dados forem adicionados.

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

Eu não tenho muitas experiências com formatação condicional no VBA. Talvez a criação de uma nova condição toda vez que os dados forem adicionados acabará em muitos grupos de formatação quando você abrir o menu Formatação condicional. Para mantê-lo como uma formatação, talvez seja necessário definir sempre a formatação para todo o intervalo ( set rng=Range("A1:A" & target.row) ).

Solução livre VBA: se você converter seus dados em uma tabela (tabela de inserção do EXCel 2007), na medida em que os usuários adicionarem as linhas imediatamente abaixo dos dados existentes, suas fórmulas e formatações condicionais serão automaticamente transferidas para a nova linha também.

    
por 14.06.2015 / 16:07