excel vba excel-vba

Cómo obtener el color de fondo de un formato condicional en Excel usando VBA



excel-vba (4)

Me gustaría obtener el color de fondo de la celda asignado usando una regla de formato condicional en Excel en mi script VBA. Me di cuenta de que el uso de la propiedad Range.Interior.Color no tiene el color resultante de una función de formato condicional aplicada de Excel.

Investigué un poco y encontré este largo camino here , se compila y se ejecuta, pero no obtengo el color asignado [siempre obtengo (255,255,255)]

Estoy usando Excel 2016 y me pregunto si hay una manera más simple de obtener esta información usando alguna función VBA incorporada o cualquier otro truco de Excel.


Desea Range.DisplayFormat si necesita tener en cuenta el formato condicional

(agregado en Excel 2010)


El siguiente código proporciona el valor HEX y RGB del rango, ya sea formateado con formato condicional o de otro modo. Si el rango no está formateado con Formato condicional y tiene la intención de usar la función iColor en Excel como UDF. No va a funcionar Lea el siguiente extracto de MSDN .

Tenga en cuenta que la propiedad DisplayFormat no funciona en funciones definidas por el usuario. Por ejemplo, en una función de hoja de trabajo que devuelve el color interior de una celda, si usa una línea similar a:

Range.DisplayFormat.Interior.ColorIndex

entonces la función de hoja de trabajo se ejecuta para devolver un # ¡VALOR! error.

Public Function iColor(rng As Range, Optional formatType As String) As Variant ''formatType: Hex for #RRGGBB, RGB for (R, G, B) and IDX for VBA Color Index Dim colorVal As Variant colorVal = rng.DisplayFormat.Interior.Color Select Case UCase(formatType) Case "HEX" iColor = "#" & Format(Hex(colorVal Mod 256),"00") & _ Format(Hex((colorVal / 256) Mod 256),"00") & _ Format(Hex((colorVal / 65536)),"00") Case "RGB" iColor = Format((colorVal Mod 256),"00") & ", " & _ Format(((colorVal / 256) Mod 256),"00") & ", " & _ Format((colorVal / 65536),"00") Case "IDX" iColor = rng.Interior.ColorIndex Case Else iColor = colorVal End Select End Function ''Example use of the iColor function Sub Get_Color_Format() Dim rng As Range For Each rng In Selection.Cells rng.Offset(0, 1).Value = iColor(rng, "HEX") rng.Offset(0, 2).Value = iColor(rng, "RGB") Next End Sub


La propiedad .FormatCondition de rango o selección debería ayudar con cualquier formato Usar con ... Finalizar con

Si desea conocer los valores exactos de color RGB, puede intentar grabar macro y obtener los valores rgb.


Si desea conocer el color de una celda que ha sido coloreada por una regla de formato condicional (CFR), use .Range.DisplayFormat.Interior.Color¹.

Si desea saber definitivamente de qué color una celda puede haber sido coloreada o no por un CFR, debe iterar a través de los CFR que podrían estar afectando esa celda y ver cada una de las .Range.FormatConditions ( x ) .Interior.Color .

¹ Nota: .DisplayFormat no está disponible para una hoja de cálculo UDF.