2014-06-30

Propiedades ColorIndex en VBA

En Excel empleamos el color de las celdas y de las fuentes para resaltar o facilitar la lectura de los datos. Excel posee dos propiedades diferentes para asignar programáticamente el color de relleno y el color de fuente: ColorIndex y Color.

ColorIndex genera hasta 57 colores:

Podemos generar el listado anterior con los colores de relleno y de fuente con el siguiente código:

Sub ColorIndex()
    Dim Cindex As Integer
    For Cindex = 0 To 56
        Cells(Cindex + 1, 1).Interior.ColorIndex = Cindex
        Cells(Cindex + 1, 1).Value = "Interior.ColorIndex = " & Cindex
        Cells(Cindex + 1, 2).Font.ColorIndex = Cindex
        Cells(Cindex + 1, 2).Value = "Font.ColorIndex = " & Cindex
        If Cells(Cindex + 1, 1).Interior.ColorIndex = 1 _
            Then Cells(Cindex + 1, 1).Font.ColorIndex = 48
    Next Cindex
        Columns(1).EntireColumn.AutoFit
        Columns(2).EntireColumn.AutoFit
End Sub
La propiedad Color es más extensa que ColorIndex ya que permite especificar colores con valores numéricos, hexadecimales, octales y RGB. Además, la paleta de Color es más extensa que la de ColorIndex. 57 colores en ColorIndex, 256 3 en RGB (16.777.216). Sin embargo, por su simplicidad, un índice del 0 al 56 en la paleta, podemos optar por ColorIndex en lugar de especificar 3 dígitos de 0 a 255 para un color en RGB.

Para ver el valor de las propiedades seleccionamos una celda y en la ventana de inmediato escribimos
?Selection.Interior.ColorIndex o ?Selection.Interior.Color y presionamos Entrar. En una celda que no tiene asignado un color de relleno el resultado de ColorIndex es -4142 (xlColorIndexNone) y el de Color es 16777215. Como ColorIndex solamente admite 56 colores, es posible que a dos colores diferentes les asigne el mismo valor. ColorIndex asignará el valor más cercano de la paleta del 0 al 56. Para conocer y asignar un color con precisión deberemos usar la propiedad Color.

Para mostrar en la barra de estado la propiedad ColorIndex del relleno de una celda y del color de fuente añadimos estos dos eventos en la hoja deseada:

' Muestra las propiedades
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Application.StatusBar = "Celda actual: Interior.ColorIndex = " & _
        ActiveCell.Interior.ColorIndex & "  /  Font.ColorIndex = " & _
        ActiveCell.Font.ColorIndex
End Sub
' Devuelve a Ms Excel el control de la barra de estado
Private Sub Worksheet_Deactivate()
Application.StatusBar = False
End Sub
Referencias:
Artículo de Microsoft Developer Network

No hay comentarios:

Publicar un comentario

Nube de datos