Cambiar color autoforma dependiendo de otras

Les pido me ayuden con lo siguiente. Tengo 5 autoformas (a1, a2, a3, a4, a5, a6); cada una ejecuta una macro al hacerle clic. Por default las 5 autoformas tienen color azul. Les pido me indiquen cómo hacer para que cambie a color rojo la autoforma que se le hace clic, y vuelva a su color original (azul) cuando se se hace clic a otra de las autoformas. Por ejemplo:

  • Si hago clic en a1, entonces a1 tiene color rojo y a2, a3, a4, a5 tienen color azul
  • Si hago clic en a2, entonces a2 tiene color rojo y a1, a3, a4, a5 tienen color azul... Y así sucesivamente con todas

1 respuesta

Respuesta
1

Bueno tendrías que saber los código RGB te dejo un link que ayuda en eso: http://www.rapidtables.com/web/color/RGB_Color.htm

Por otro lado la rutina seria utilizando la condicional If Else y seria la siguente:

Sub CambioColor()

'Con la autoforma seleccionada cambio color

ActiveSheet.Shapes.Range(Array("Rounded Rectangle 1")).Select
With Selection.ShapeRange.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 0, 0)
.Transparency = 0
.Solid
End With

'Con la autoforma seleccionada cambio color de borde
With Selection.ShapeRange.Line
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 0, 0)
.Transparency = 0
End With
End Sub

En donde 255 es color rojo acá estoy cambiando relleno y bordes al mismo color. Aclaración en la línea ActiveSheet. Shapes. Range(Array("Rounded Rectangle 1")).Select donde dice: "Rounded Rectangle 1" tendras que cambiarlo por el nombre que lleva la autoforma que haz creado.

Si gustas pasame tu archivo a mi correo [email protected]

Estimado Alberto, gracias por ayudarme. Lo que me estaría faltando es en dónde y cómo poner el if y else, como para que cuando se hace clic en una autoforma tenga color rojo, pero cuando se hace clic en otra autoforma sea esta última la que tome color rojo, y la anterior que tenía color rojo cambie a azul. 

En otras palabras la lógica sería: Si click en autoforma1 entonces autofora1 rojo. Si clic en autoforma2 entonces autoforma2 rojo y autoforma1 azul

Estimado te 02 adjunto la rutina:

He considerado que por defecto al inicio los botones estarán activos con el color azul.

Copia la rutina y pegarlo en un módulo, luego en las formas le das clic derecho / asignar macro y: en la figura1 le asignas PruebaRojoAzul . Repites el proceso con la figura dos pero esta vez le asignas PruebaAzulRojo

Sub PruebaRojoAzul()
'Selecciono la forma1
ActiveSheet.Shapes("Rounded Rectangle 1").Select
With Selection.ShapeRange.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 0, 0) 'Le indico que la forma se ponga en color rojo
.Transparency = 0 'No quiero transparecia así que la dejo en cero
.Solid ' En color solido
End With
'Por estética cambio borde de línea
With Selection.ShapeRange.Line
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 0, 0)
.Transparency = 0
End With
'Selecciono Forma2
ActiveSheet.Shapes("Rounded Rectangle 2").Select
With Selection.ShapeRange.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 76, 156)
.Transparency = 0
.Solid
End With
With Selection.ShapeRange.Line
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 76, 156)
.Transparency = 0
End With
'Indico que una vez terminado el proceso se ubique en la celda A1 de la hoja activa
Range("A1").Select
End Sub

Sub PruebaAzulRojo()
ActiveSheet.Shapes("Rounded Rectangle 2").Select
With Selection.ShapeRange.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 0, 0)
.Transparency = 0
.Solid
End With
With Selection.ShapeRange.Line
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 0, 0)
.Transparency = 0
End With

ActiveSheet.Shapes("Rounded Rectangle 1").Select
With Selection.ShapeRange.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 76, 156)
.Transparency = 0
.Solid
End With
With Selection.ShapeRange.Line
.Visible = msoTrue
.ForeColor.RGB = RGB(0, 76, 156)
.Transparency = 0
End With
Range("A1").Select
End Sub

Considerar:

Deberás asignar el nombre de la forma para eso selecciona la forma y en en la casilla de nombre aparece el nombre asignado:

Y en la línea: ActiveSheet. Shapes("Rounded Rectangle 1").Select

Rounded Rectangle 1, lo cambias por el nombre que tenga tu forma.

En caso los colores no sean los que buscas ve al link que te envié con los colores RGB te posicionas en el color deseado ejemplo: Quieres que sea verde

Vas a tu rutina y en la línea modificas

.ForeColor.RGB = RGB(0, 76, 156)

Por

.ForeColor.RGB = RGB(0, 204, 0)

Si te fijas va en el orden como muestra la tabla Red=0,Green=204, Blue=0

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas