formattazione condizionale da VBA



  • formattazione condizionale da VBA
    di Piero (utente non iscritto) data: 22/08/2014 17:01:00

    Qualcuno sa dirmi come riuscire ad accedere da codice VBA al tipo di colore di una cella, generato da formattazione condizionale? Normalmente il colore di sfondo di una cella è gestibile mediante il seguente codice:

    cella.Interior.ColorIndex

    tuttavia questo codice non vale per catturare il colore modificato da una formattazione condizionale imposta alla cella. Dovrei sviluppare una macro che mi somma i valori contenuti nelle celle di un intervallo che hanno lo stesso colore applicato da una formattazione condizionale. Spero di essermi spiegato bene.



  • di isy data: 22/08/2014 20:40:32

    Ciao,
    sicuro che non puoi operare direttamente sui dati presenti nelle celle...

    Ecco un codice di esempio.
    Adatta il range del codice, questo esempio conta le celle formattate col colore rosso.
     
    Option Explicit
    
    Sub FormatCondi()
        Dim FC As FormatCondition, F1, F2
        Dim Num As Long, Cella As Range
        For Each Cella In [C5:E20]
            For Each FC In Cella.FormatConditions
                If FC.Type = xlCellValue Then
                    F1 = Evaluate(FC.Formula1)
                    Select Case FC.Operator
                    Case xlBetween: If Cella >= F1 And Cella <= Evaluate(FC.Formula2) Then Exit For
                    Case xlEqual: If Cella = F1 Then Exit For
                    Case xlGreater: If Cella > F1 Then Exit For
                    Case xlGreaterEqual: If Cella >= F1 Then Exit For
                    Case xlLess: If Cella < F1 Then Exit For
                    Case xlLessEqual: If Cella <= F1 Then Exit For
                    Case xlNotBetween: If Cella < F1 _
                    Or Cella > Evaluate(FC.Formula2) Then Exit For
                    Case xlNotEqual: If Cella <> F1 Then Exit For
                    End Select
                Else
                    If Evaluate(FC.Formula1) Then Exit For
                End If
            Next FC
            If Not FC Is Nothing Then
                If FC.Interior.ColorIndex = 3 Then Num = Num + 1 'Conta solo se trova il colore Rosso
            End If
        Next
        Range("C1") = Num
        MsgBox Num
    End Sub
    


  • DisplayFormat.Interior.Color
    di Luca73 data: 25/08/2014 12:29:10

    Ciao
    se vuoi "catturare" il colore reale della cella in esame devi usare RangeinEsame.DisplayFormat.Interior.Color
    oppure RangeinEsame.DisplayFormat.Interior.ColorIndex. Questo comando nel caso di formattazione condizionale ti mostra la " parte interna dell'oggetto Range associato, come visualizzato nell'interfaccia utente corrente. Proprietà di sola lettura."