jueves, 27 de abril de 2017

VBA: Recuperar el color con DisplayFormat

Un lector consultaba por un post publicado hace algún tiempo (ver).

El comentario del usuario era:
[...]Muchas gracias publicar esta macro, es exactamente lo que necesito , pero lamentablemente no me esta funcionando. Me arrojo siempre el mismo numero independientemente de color que que tenga la celda ,14. Estoy usando tres tipos de colores para el formato condicional Verde Rojo y amarillo[...]


Lo que veremos hoy es una alternativa a lo publicado que me permite recuperar el color de un objeto Range a través de su propiedad .DisplayFormat.

Ojo!! que tiene un par de inconvenientes:
1- es una propiedad de solo lectura, por lo que no podremos modificar nuestras celdas empleando esta propiedad.
2-Únicamente se puede emplear en procedimientos Sub (y NO en Function!!), por lo que no podremos generar UDF para recuperar el color de la celda (tal como se empleaba en el post anterior comentado).
Si lo intentas comprobarás que tu UDF te devolverá siempre un error de #¡VALOR!


Con estas condiciones presentes, veamos cómo podemos recuperar el color de relleno y de la fuente de nuestras celdas.

VBA: Recuperar el color con DisplayFormat



Abrimos la ventana de código de nuestro módulo estándar y añadimos el siguiente código:

Sub Color_Celda()
'recorremos el rango
For Each celda In Range("A2:A7")
    'y recuperamos el color de relleno y fuente
    'ya provenga de formato o formato condicional
    celda.Offset(0, 2).Value = celda.DisplayFormat.Interior.ColorIndex
    celda.Offset(0, 3).Value = celda.DisplayFormat.Font.ColorIndex
Next celda

End Sub



Tras ejecutarlo comprobaremos cómo nos devuelve los mismos valores que empleando la función del post publicado tiempo atrás tiempo (ver), tanto si el color proviene de un formato 'normal' o uno condicional.

VBA: Recuperar el color con DisplayFormat

No hay comentarios:

Publicar un comentario