jueves, 21 de abril de 2016

VBA: La Paleta de Colores en VBA para Excel (.Color vs .ColorIndex).

Frecuentemente me preguntan en mis formaciones por la paleta de colores, en especial cuando hablamos de formatos...
Veremos hoy un sencillo ejemplo de cómo obtener las equivalencias entre las propiedades (.Color y .ColorIndex) y la función RGB para trabajar con colores en Excel.


En el siguiente código listamos los 57 colores permitidos por la propiedad .ColorIndex (de 0 a 56), entre los 16.777.216 de colores posibles de .Color, y cómo recuperarlos con la función RGB (Red, Green, Blue - valores entre 0 y 255-) estandarizada...
Igualmente veremos cuál es la forma de expresarlo en formato HTML.


Para resolver nuestra cuestión en particular, insertamos el siguiente código dentro de un módulo estándar del explorador de proyectos del Editor de VB:

Sub PaletaColores()
'Paleta básica de 57 colores (0 to 56)
Dim c As Long
Dim strIni As String, strHEX As String

'Añadimos cabecera...
With Range("A1:H1")
    .Value = Array("Color:", "Interior", "Font", "HTML (Hexadecimal)", "Rojo (R)", "Verde (G)", "Azul (B)", "ColorIndex")
    .Font.Bold = True
End With

'recorremos los 57 colores...
For c = 0 To 56
    'Indicamos Número de Color....
    Cells(c + 2, 1).Value = "Color " & c & ":"
    
    'damos color al Relleno de la celda, empleando la propiedad ColoIndex
    Cells(c + 2, 2).Interior.ColorIndex = c
    
    'damos color a la Fuente de la celda
    'escribimos el texto [Color...]
    With Cells(c + 2, 3)
        .Font.ColorIndex = c
        .Value = "[Color " & c & "]"
    End With
    
    'a partir del valor numérico recuperado de la propiedad Color de la celda
    'conseguimos un identificador de seis caracteres....
    strIni = Right("000000" & Hex(Cells(c + 2, 2).Interior.Color), 6)
    Rojo = Right(strIni, 2)     'dos caracteres por la derecha para el Rojo
    Verde = Mid(strIni, 3, 2)   'dos caracteres enmedio para el Verde
    Azul = Left(strIni, 2)      'dos caracteres por la izquierda para el Azul
    
    'componemos el código Hexadecimal
    strHEX = Rojo & Verde & Azul
    'Añadimos la almohadilla necesara para obtener el código de color en HTML/Hexadecimal
    Cells(c + 2, 4).Value = "#" & strHEX
    
    'Obtenemos en número decimal el valor del color
    'empleamos la función HEX.A.DEC
    'y descomponemos el valroes decimales para conseguir el código de color en formato RGB
    Cells(c + 2, 5).Formula = Application.WorksheetFunction.Hex2Dec(Rojo)
    Cells(c + 2, 6).Formula = Application.WorksheetFunction.Hex2Dec(Verde)
    Cells(c + 2, 7).Formula = Application.WorksheetFunction.Hex2Dec(Azul)
    
    'Acabamos añadiendo el código de color para ColorIndex
    Cells(c + 2, 8).Value = Cells(c + 2, 2).Interior.Color
Next c

'autoajustamos ancho de columnas
Range("A1:H1").EntireColumn.AutoFit

End Sub



El resultado lo vemos en la siguiente imagen:

VBA: La Paleta de Colores en VBA para Excel (.Color vs .ColorIndex).



Observemos, como curiosidad, como los valores puros de los colores 3 (Rojo), 4 (Verde) y 5 (Azul) con la propiedad .ColorIndex, corresponden con la forma RGB a los valores RGB: 255,0,0; RGB: 0,255,0 y RGB: 0, 0, 255 respectivamente...

4 comentarios:

  1. Hermosa pieza de codigo, excepto por una cosa, deberia tener una sentencia que cree una nueva hoja antes que nada, de manera que NOOOOOOO borres la hoja actual mandando a la $#$#@$#@$#@, tus notas de toda la mañana. Solo una sugerencia.

    ResponderEliminar

Nota: solo los miembros de este blog pueden publicar comentarios.