sábado, 10 de marzo de 2012

Trabajar con colores

Tratar con los colores en Excel no es un asunto trivial, admito que es algo complicado, grabar una macro mientras se cambia el color en una celda u objeto solo genera confusión.
Ahora podemos acceder en un libro a una cantidad de colores prácticamente ilimitada  (16.777.216 colores), nadie puede conocer el valor de casi 17 millones de colores.
Podemos cambiar el color de la celda activa a verde utilizando la siguiente instrucción.

Sub colorVerde()
ActiveCell.Interior.color = 62280
End Sub

Una buena manera de cambiar los colores es especificar el color de acuerdo con sus componentes  rojo, verde y azul, el sistema de colores RGB.

El rango de cada uno de estos colores va desde el 0 al 255, por lo tanto el número total de colores posibles seria 256x256x256= 16.777.216 colores.

Para especificar los colores en VB mediante RGB utilizamos la función RGB que nos devuelve un número  que representa un valor de color.

Para representar el color del ejemplo anterior con RGB lo haríamos de la siguiente forma.

Sub colorVerde()
ActiveCell.Interior.color = RGB(0, 255, 0)
End Sub

La siguiente tabla muestra algunos colores estándar y sus valores de rojo, verde y azul:


Color
Valor de rojo
Valor de verde
Valor de azul
Negro
0
0
0
Azul
0
0
255
Verde
0
255
0
Cián
0
255
255
Rojo
255
0
0
Magenta
255
0
255
Amarillo
255
255
0
Blanco
255
255
255


El siguiente procedimiento nos muestra las 60 variantes de los colores de la paleta de colores (Colores del Tema).

Quedaría más, menos así:



Sub TemaColores()
  Dim r As Long, c As Long
  For r = 1 To 6
    For c = 1 To 10
        With Cells(r, c).Interior
        .ThemeColor = c
        Select Case c
            Case 1
            Select Case r
                Case 1: .TintAndShade = 0
                Case 2: .TintAndShade = -0.05
                Case 3: .TintAndShade = -0.15
                Case 4: .TintAndShade = -0.25
                Case 5: .TintAndShade = -0.35
                Case 6: .TintAndShade = -0.5
            End Select
        Case 2
            Select Case r
                Case 1: .TintAndShade = 0
                Case 2: .TintAndShade = 0.5
                Case 3: .TintAndShade = 0.35
                Case 4: .TintAndShade = 0.25
                Case 5: .TintAndShade = 0.15
                Case 6: .TintAndShade = 0.05
            End Select
        Case 3
            Select Case r
                Case 1: .TintAndShade = 0
                Case 2: .TintAndShade = -0.1
                Case 3: .TintAndShade = -0.25
                Case 4: .TintAndShade = -0.5
                Case 5: .TintAndShade = -0.75
                Case 6: .TintAndShade = -0.9
            End Select
        Case Else
            Select Case r
                Case 1: .TintAndShade = 0
                Case 2: .TintAndShade = 0.8
                Case 3: .TintAndShade = 0.6
                Case 4: .TintAndShade = 0.4
                Case 5: .TintAndShade = -0.25
                Case 6: .TintAndShade = -0.5
            End Select
        End Select
        Cells(r, c) = .TintAndShade
        End With
    Next c
  Next r
End Sub

Cells(x,x).Interior.TintAndShade
Devuelve o establece un valor que aclara u oscurece un color se escribir un número comprendido entre -1 (más oscuro) y 1 (más claro) para la propiedad TintAndShade; el cero (0) corresponde al valor neutro.

domingo, 4 de marzo de 2012

Suma Selectiva

En este post, hemos creado un procedimiento que pueda realizar una suma selectiva de acuerdo a una serie de condiciones. Por ejemplo, es posible que quieran sumar las cifras que han alcanzado el objetivo de ventas. 
Este procedimiento puede resumir los valores que estén por debajo o por encima de un valor dado.

Este procedimiento se iniciara cuando presionemos un botón creado en nuestra hoja, para insertar el botón nos vamos a la ficha programador insertar controles, en controles Activex presionamos en el icono del botón.


Lo pegamos donde nos sea mas accesible, seleccionamos el botón, presionamos sobre el botón derecho del ratón y en el cuadro de dialogo presionamos propiedades.

En el cuadro de propiedades seleccionamos la propiedad Caption y la cambiamos por el nombre que identifique la función del botón, por ejemplo Suma Selectiva.


Hacemos doble click sobre el botón y directamente nos sale el editor de VB con el evento predeterminado del botón que hemos creado, a este evento le añadimos nuestro procedimiento.

Private Sub CommandButton1_Click()
Dim rng As Range, i As Integer, a As Integer
Dim temporal, sumFallida, suma, valorLimite As Single
sumFallida = 0
suma = 0
valorLimite = 0
Set rng = Application.InputBox("Por favor seleccione el rango de calculo!", _
"SeleccionarRango", Selection.Address, , , , , 8)
On Error Resume Next
valorLimite = InputBox("Por favor establezca el valor limite!", "SeleccionarValor", , , 6)
a = rng.Count
    For i = 1 To a
            temporal = rng.Cells(i).Value
        Select Case temporal
        Case Is < valorLimite
            sumFallida = sumFallida + temporal
        Case Is >= valorLimite
            suma = suma + temporal
        End Select
    Next i
MsgBox "La suma de los valores menores de " & valorLimite & " es: " & Str(sumFallida) & vbCrLf & _
"La suma de los valores mayores de " & valorLimite & " es: " & Str(suma)
End Sub

Cerramos el editor y quitamos el modo diseño de la ficha programador, presionamos sobre el botón y si todo ha salido correctamente nos deberá de salir algo parecido a la siguiente imagen: