Cambiando el color de formas con VBA

Con este video tutorial se da respuesta a un usuario que pregunta cómo cambiar el color de una autoforma prediseñada al cambiar el color de relleno de una celda; todo mediante código VBA.


Para comenzar, es necesario aclarar que toda autoforma es leída o interpretada por el código VBA como un objeto de tipo Shape. Es decir, podemos iterar por toda la colección Shapes que contiene cada uno de estos objetos y cambiar sus diferentes propiedades, permitiendo así asignarle el color que pueda contener una celda en la hoja de cálculo en un momento determinado.

Procedimiento Sub que cambia el color de una autoforma según el color de una celda

Sub AjustarColor()
   With ActiveSheet.Range("E5").Interior
      If .ColorIndex <> xlColorIndexNone Then
         ActiveSheet.Shapes("Triangulo").Fill.ForeColor.RGB = .Color
      End If
   End With
   With ActiveSheet.Range("E10").Interior
      If .ColorIndex <> -4142 Then
         ActiveSheet.Shapes("Rectangulo").Fill.ForeColor.RGB = .Color
      End If
   End With
   With ActiveSheet.Range("E15").Interior
      If .ColorIndex <> -4142 Then
         ActiveSheet.Shapes("Circulo").Fill.ForeColor.RGB = .Color
      End If
   End With
End Sub

Esto se hace automáticamente asignando el procedimiento escrito a un evento del objeto Worksheet que se ejecuta cuando el usuario cambia la selección de una celda en la hoja; para ello, utilizamos el evento SelectionChange de una hoja de cálculo mediante el editor de VBA al cual le asignamos el Procedimiento Sub que hace todo este trabajo.

Configuración del evento SelectionChange de la hoja que contiene las autoformas

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   Color.AjustarColor
End Sub


3 comentarios:

  1. hoola! pero no funciona con formato cxondicional. seria de mucha ayuda si pudieras hacer uno asi

    ResponderBorrar
  2. Estimado muy buen vídeo!
    yo tengo un inconveniente y quería pedir su ayuda! te detallo mi caso.
    Ejemplo: 2-ene-19 2-ene-19 18 3426 637 30 2665 -18498,98 10 V -18498,98 FALTANTE

    LO que neceito hacer es losiguinte sobre control de documentacion: si yo pinto la celda A1 de amarillo ( color de Fondo) entonces D1 entregado, de ,o contrario faltante

    Desde ya muchas gracias

    ResponderBorrar