Utilizar Paleta de Colores para Seleccionar Color

En algunos de los proyectos que realizamos en Excel nos resultara necesario que el usuario pueda elegir un color para realizar una determinada tarea, por ejemplo para que el usuario pueda elegir un color de fondo para un formato, en estos casos podemos hacer uso de la paleta de colores de Excel y mediante macros obtener el color que el usuario seleccione.
Para que el usuario pueda elegir un color primero debemos especificar que celdas servirán para capturar el color a esas celdas les podemos llamar “Celdas de Color”, y debemos tener una macro que nos indique si una celda es una “celda de color” o no para ello utilizamos la siguiente macro la cual debe colocarse en un módulo.

Function EsCeldaColor(Celda As Range) As Boolean
    Dim CeldasColor As Variant
    Dim i As Integer
    Dim Resultado As Boolean
    'Las celdas de color se pueden especificar todas juntas, pero cuando son de diferentes hojas se deben separar para que no ocurran errores
    CeldasColor = Array(Range("Hoja1!C2:C3,C4"), Range("Hoja2!C2"))
    For i = LBound(CeldasColor) To UBound(CeldasColor)
        If CeldasColor(i).Parent.Name = Celda.Parent.Name Then
            If Not Application.Intersect(CeldasColor(i), Celda) Is Nothing Then
                Resultado = True
            End If
        End If
    Next
    EsCeldaColor = Resultado
End Function

Cuando una celda es una “celda de color” y el usuario seleccione dicha celda se debe mostrar la paleta de colores y para que eso ocurra necesitamos la siguiente macro que muestra la paleta de colores y guarda el color en la “celda de color”, esta macro se debe colocar en modulo

Sub SeleccionarColor(Celda As Range)
    On Error Resume Next
    Dim lngResult As Long, lngO As Long, intR As Integer, intG As Integer, intB As Integer
    lngO = ThisWorkbook.Colors(1)
    Err.Clear
    lngInitialColor = CLng(Celda)
    If Err.Description = "" Then
        intR = lngInitialColor And 255
        intG = lngInitialColor \ 256 And 255
        intB = lngInitialColor \ 256 ^ 2 And 255
    End If
    If Application.Dialogs(xlDialogEditColor).Show(1, intR, intG, intB) = True Then
        lngResult = ThisWorkbook.Colors(1)
        Celda = lngResult
    End If
    ThisWorkbook.Colors(1) = lngO
End Sub

Y también necesitamos la siguiente macro que es la que detecta cuando el usuario selecciona una celda y decide si se muestra la paleta de colores o no, esta macro se debe colocar en el objeto “ThisWorkbook”

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
    If EsCeldaColor(Target) Then
        SeleccionarColor Target
    End If
End Sub

Y con esto cada vez que el usuario seleccione una celda esta última macro comprobara (con la primera macro) que la celda es una celda de color y mostrara la paleta de colores (con la segunda macro).

Y el resultado es el siguiente

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s