«¡Ay Dios!, justo cuando pensábamos que podíamos aprender algo de VBA sobre manipulación de colores con la grabadora de macros en Excel; todo se viene abajo»
¿Qué ha pasado?
Ok, demos un paso atrás y recordemos aquellos momentos en los cuales hemos querido aplicar un color especifico a cierto grupo de datos y, para agilizar nuestro trabajo decidimos utilizar la grabadora de macros para hacerlo, con ello no solo podremos lograr la automatización en cierto grado, sino que también podremos ver el código y aprender un poco más a profundidad la programación de colores en Excel, para de esta manera poder utilizarlo a nuestro favor y adecuar nuestra automatización para que se ajuste de mejor manera a la tarea.
Puedo asegurar que al menos el 95% de los usuarios de Excel les ha sucedido que al querer comprender la lógica de programación de colores en VBA usando la grabadora de macros se encuentran con líneas de código solo llevan a más confusión, a mí me paso.
Refresquemos un poco nuestra memoria: por ejemplo, si dejamos la celda activa en A1 y encendemos la grabadora de macros para posteriormente aplicarle el color: Anaranjado, Énfasis 2, Oscuro 52%, mejor dicho, el de la imagen siguiente:
Entonces, cuando detenemos la grabadora y vamos al editor de visual basic para observar el código que arroja este procedimiento, nos encontramos con varias líneas de código, que para ser sincero en su momento en vez de ayudarme a aterrizar la comprensión de vba para colores, terminaron por desorientarme mucho más y, creo que no soy al único que la ha sucedido. Demos un vistazo a la macro:
Hasta la estructura With … End With nos puede confundir hasta cierto punto. ¿No es así?
Pero, cambiemos todo eso y vamos a explorar cómo funciona la programación de colores en VBA para Excel, por lo menos en un primer nivel de comprensión
Entendiendo el uso de colores en VBA
– Otro paso atrás, !al 2003!
En aquella época existía una paleta de colores, que, en realidad aún está disponible, la cual constaba de un conjunto colores predeterminados, está bastante limitada paleta sólo tenía 56 posibilidades de colores y, sin importar que, eran las únicas opciones para: gráficos, celdas, cuadros de texto, etc. La paleta de colores es la siguiente:
– Desde Excel 2007 en adelante
Cuando fue lanzada la versión de Excel 2007, las posibilidades de colores en Excel dieron un paso gigantesco. Básicamente el modelo RGB fue añadido, con lo cual una cantidad inmensa de colores estaba disponible de ahora en adelante.
Modelo de Colores RGB
El modelo RGB se basa en tomar 3 colores, Rojo – Verde – Azul (Red – Green – Blue) y superponerlos con distintos niveles, es decir, el modelo RGB representa otro color dada la mezcla por adición de estos tres colores, básicamente variando la intensidad de uno, dos o incluso los tres colores primario de la luz (los mencionados anteriormente). Un vistazo a algunas posibilidades:
La intensidad de cada uno de los colores (Rojo, Verde, Amarillo) van en una escala que parte desde el número 0 hasta el 255, por lo tanto tenemos
¡Así es! Contamos con 16,777,216 posibilidades de colore en Microsoft Excel a partir de la versión 2007 en adelante, una cantidad abrumadora ¿no es así?. Lo anterior aplica para prácticamente todo en Excel: Celdas, gráficos, formas, formato condicional, etc.
– ¿Cómo funciona la escala para los colores en el modelo RGB?
Como mencione hace un segundo, la escala va de 0 a 255 para cada color primario de la luz, esta escala varia la «intensidad» del color donde el valor máximo corresponde a 255, esto es el color puro; por otra parte, si es 0 significa que tiene el menor grado de intensidad de luz, es decir el color ya no es visible, en este orden de ideas si dejamos lo 3 colores en 0, entonces se generaría negro puro (por aquello de que el «negro», la oscuridad, es el resultado de la ausencia de luz), mientras que si dejamos todos en 255 sería blanco (Por aquello que la combinación de «todas» las longitudes de onda dan como resultado blanco)
¿Cómo generaríamos entonces rojo puro?
En esencia dejamos el color rojo con su mayor intensidad de luz, es decir, 255 y los demás en la mínima, en la nula: 0. Entonces sería:
R:255 G:0 B:0 -> «Rojo Puro»
¿Cómo generaríamos entonces verde y azul puro?
R:0 G:255 B:0 -> «Verde Puro»
R:0 G:0 B:255 -> «Azul Puro»
Ya comprendemos la dinámica del modelo RGB, ahora si recordamos la generación de colores secundarios, por ejemplo:
Podemos jugar un poco más: R:255 G:0 B:255 = Violeta
Un profesor en la universidad de stanford creo esta página: RGB Explorer Stanford para jugar, explorar y entender un poco más el modelo RGB, dale un vistazo para familiarizarte un poco más con este modelo de generación de colores.
– ¿Cómo funciona el modelo RGB en VBA?
Como podemos notar del resultado de la grabadora de macros, no hay nada parecido en lo cual se puedan indicar 3 números para indicar el RGB, en definitiva, la grabadora de macros no nos proporciona esta información, no obstante, contamos con la función RGB de visual basic
.
Función RGB: Retorna un número entero que representa el RGB indicado en sus parámetros
Parámetros
Valor de Retorno: Integer (Un número entre 0 y 16,777,216)
.
Bien, dice que retorna un número entero, básicamente esto es así porque cada posibilidad de color en el conjunto RGB tiene asignado un número que va desde el 0 hasta el 16,777,216. Así es como lo trabaja internamente VBA para colores, afortunadamente la función RGB nos simplifica este trabajo, pues manejar aproximadamente 17 millones de opciones es imposible para cualquier persona; bueno, eso creo.
Además, si queremos averiguar el RGB de un color que nos gustó, simplemente debemos mirar sus componentes rojo, verde, azul en la parte inferior del cuadro de diálogo color en su pestaña Personalizado, véase la imagen a continuación:
– Color de Fondo
¿Cómo aplicamos el modelo RGB en VBA?
Es sencillo de hecho, por ejemplo si queremos aplicar el color RGB(242,242,242) como fondo para el conjunto de celdas C2:E5 utilizamos el objeto interior y su propiedad color para asignar el color, así:
Range(«C3:E5»).Interior.Color = RGB(242, 242, 242)
– Color de Fuente
¿Qué tal el modelo RGB en VBA?
Para el color de fuente de las celdas utilizamos la propiedad color del objeto font, por ejemplo si queremos aplicar el color RGB(68,114,196):
Range(«A1»).Font.Color = RGB(68, 114, 196)
Convertir Colores
Como se mencione más arriba internamente VBA trabajo con un número entero que va desde 0 hasta 16,777,216 con lo cual es importante poder convertir de un modelo a otro, de RGB a Decimal (así es como se le llama a la notación utilizada internamente por VBA) y de Decimal a RGB
– De RGB a Decimal
Para pasar de RGB a Decimal solo hace falta asignarle la función RGB junto con los parámetros deseados a una variable tipo long, algo así: lDecimal = RGB(100,210,99); si necesitamos conocerlo directamente en la interfaz de Excel podemos crear una UDF (User define function), solo insertemos un nuevo módulo y agregamos estas líneas de código en el:
Function DERGBADECIMAL(R, G, B) As Long
DERGBADECIMAL = RGB(R, G, B)
End Function
Por ejemplo, digamos que queremos conocer el decimal del RGB: 14,14,241; entonces vamos a Excel y escribimos nuestra fórmula, el intellisense nos ayuda a encontrarla más rápidamente:
Seleccionamos la función DERGBADECIMAL con el mouse o con la tecla TAB. La dificultad de las UDF es la ausencia del tooltip con los argumentos, pero solventemos esto con la combinación de teclas:
Y Booooooooooom !!!
Tenemos lo argumentos, véase la imagen:
Excelente atajo de teclado, ¿no crees? A mí personalmente me encanta. En esencia tenemos los nombres de los argumentos de VBA, vamos seleccionando y añadiendo el valor adecuado
El atajo de teclado: Ctrl + Shift + A es especialmente útil cuando tenemos muchas funciones personalizadas o cuando tiene múltiples argumentos, con lo cual nos permite recordar sin necesidad de salir del modo edición de la celda.
El resultado de la función personalizada DERGBADECIMAL:
Importante de lo anterior, el atajo de teclado Ctrl + Shift + A.
– De Decimala RGB
Para pasar de Decimal a RGB a Decimal basta con una sola línea de código también, sin embargo, debe ser de tipo matricial para retornar los 3 elementos en distintas celdas líneas
Function DEDECIMALARGB(Valor) As Long
DEDECIMALARGB = Array(Valor \ 256 ^ 0 And 255, Valor \ 256 ^ 1 And 255, Valor \ 256 ^ 2 And 255)
End Function
Ejemplo:
No olvides ejecutar esta función con la combinación de teclas Ctrl + Shift + Enter ya que es de tipo matricial.
Obtener el valor del color
Cuando desarrollamos macros para terceros a veces queremos dejar la posibilidad de que sean capaces de asignar los colores que deseen para la automatización, en cuyo caso necesitamos conocer el valor del color para asignarlo a nuestro macro, la siguiente función puede ser una guía para nuestros desarrollos:
.
Function ObtenerColor() As Variant
Dim dAntColor As Double
dAntColor = ActiveWorkbook.Colors(1)
If Application.Dialogs(xlDialogEditColor).Show(1) = True Then
ObtenerColor = ActiveWorkbook.Colors(1)
Else
ObtenerColor = False
End If
ActiveWorkbook.Colors(1) = dAntColor
End Function
.
¿Alguna vez te toco tratar de comprender el funcionamiento de colores en VBA mediante la grabadora de macros? comenta y compartamos nuestras experiencias
– Eso es todo por mí el día de hoy, hasta la próxima oportunidad.