Dos "Private Sub Worksheet_Changee(ByVal Target As Range) " en la misma hoja

Tengo el siguiente código que es para un mapa sinoptico, en el, el ultimo "private sub" no responde. Les dejo un extracto del código, haber si me pueden ayudar. Gracias.

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$I$33" Then
If UCase(Target.Value) = "59N" Then
ActiveSheet.Shapes.Range(Array("CuadroTexto 425")).Select
ActiveSheet.Shapes.Range(Array("Rectangle 428")).Select
With Selection.ShapeRange.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 0, 0)
.Transparency = 0
.Solid

"................"

Private Sub Worksheet_Changee(ByVal Target As Range)
If Target.Address = "$I$59" Then
If UCase(Target.Value) = "59 (ins)" Then
ActiveSheet.Shapes.Range(Array("Straight Arrow Connector 539")).Select
Selection.ShapeRange.ShapeStyle = msoLineStylePreset3
ActiveSheet.Shapes.Range(Array("Straight Arrow Connector 228")).Select
Selection.ShapeRange.ShapeStyle = msoLineStylePreset3
ActiveSheet.Shapes.Range(Array("Straight Arrow Connector 541")).Select
Selection.ShapeRange.ShapeStyle = msoLineStylePreset3
ActiveSheet.Shapes.Range(Array("Straight Arrow Connector 542")).Select
Selection.ShapeRange.ShapeStyle = msoLineStylePreset3
ActiveSheet.Shapes.Range(Array("TextBox 485")).Select

.....

1 Respuesta

Respuesta
1

.21/10/16

Buenos días, Gabriel

Lo resuelves colocando todo en un solo evento Worksheet_Change y luego analizando qué celda cambia.

Reformulé la porción de código que mandaste de la siguiente manera, que te dá flexibilidad para agregar acciones relacionadas a cambios de celda:

Private Sub Worksheet_Change(ByVal Target As Range)
'  
Select Case Target.Address
'  
Case "$I$33"
    If UCase(Target.Value) = "59N" Then
        ActiveSheet.Shapes.Range(Array("CuadroTexto 425")).Select
        ActiveSheet.Shapes.Range(Array("Rectangle 428")).Select
        With Selection.ShapeRange.Fill
            .Visible = msoTrue
            .ForeColor.RGB = RGB(255, 0, 0)
            .Transparency = 0
            .Solid
    End If
'
' "................"
'  
Case "$I$59"
    If UCase(Target.Value) = "59 (ins)" Then
        ActiveSheet.Shapes.Range(Array("Straight Arrow Connector 539")).Select
        Selection.ShapeRange.ShapeStyle = msoLineStylePreset3
        ActiveSheet.Shapes.Range(Array("Straight Arrow Connector 228")).Select
        Selection.ShapeRange.ShapeStyle = msoLineStylePreset3
        ActiveSheet.Shapes.Range(Array("Straight Arrow Connector 541")).Select
        Selection.ShapeRange.ShapeStyle = msoLineStylePreset3
        ActiveSheet.Shapes.Range(Array("Straight Arrow Connector 542")).Select
        Selection.ShapeRange.ShapeStyle = msoLineStylePreset3
        ActiveSheet.Shapes.Range(Array("TextBox 485")).Select
    End If
'  
Case Else
'  
End Select
'...  

Pruebalo y coméntame si es lo que necesitabas. Si no, consultame de nuevo.

Un abrazo

Fernando

.

Si comprendo, pero eso significa que debo reemplazar los If Target.Address = por " case " en todo el programa ya hecho.

Agradecido por tu disposición y ayuda. 

.

Así es. Pero no puede convivir duplicado ese evento.

Abrazo

Fer

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas