VBA INSTRUCCIONES IF ANIDADAS - AYUDA

2 envíos / 0 nuevos
Último envío
Fran
Imagen de Fran
Offline
última acción: Hace 3 años 10 meses
alta: 06/05/2020 - 11:58
Puntos: 25
VBA INSTRUCCIONES IF ANIDADAS - AYUDA

Buenos días a todos,

Necesito hacer un Excel con funciones en VBA y no tengo mucha experiencia… a ver si alguien me puede echar un cable.

Os pongo en situación resumiendo al máximo: tengo tres celdas A1, A2 y A3, todas ellas son celdas con listas desplegables. Los valores de la lista desplegable de A2 dependen del valor que haya elegido en A1. Del mismo modo, los valores de la lista desplegable de A3 dependen del valor que haya elegido en A2. Además, necesito que al cambiar el valor seleccionado en la celda A1 me borre el dato seleccionado en las celdas A2 y A3. Hasta aquí lo he conseguido hacer. Ahora bien, también quiero que al cambiar el valor seleccionado en la celda A2 me borre el dato seleccionado en la celda A3, y esto no soy capaz de conseguirlo. He puesto la secuencia de comandos siguiente:

 

Private Sub Worksheet_Change(ByVal Target As Range)

 

If Target = Range("A1") Then

    Range("A2").Value = ""

End If

If Target = Range("A2") Then

    Range("A3").Value = ""

End If

End Sub

 

Y me da el siguiente error: “Se ha producido el error “28” en tiempo de ejecución: Espacio de pila insuficiente.”

¿alguien sabe cómo solucionarlo y me puede echar una mano?. Muchas gracias. Un saludo.

Etiquetas: 

RET
Imagen de RET
Offline
última acción: Hace 3 años 8 meses
alta: 01/06/2020 - 13:29
Puntos: 290
VBA INSTRUCCIONES IF ANIDADAS - AYUDA

Estas entrando en un bucle infinito.

Cuando pones Target=Range("A1") lo que estas poniendo es Target.Value=Range("A1").Value

Al cambiar el valor de A1 por primera vez, llamas a la rutina Worksheet_Change con Target el rango A1. Esto pone A2="", pero lanzas un nuevo evento Worksheet_Change, esta vez con Target el rango A2. y el valor de la celda A2 ahora es "" y acababas de borrar en la primera llamada el ragno A2, por lo IF Traget=Range("A2") es cierto. Te borra A3 y lanzas un nuevo evento Worksheet_Change... etc. Estas haciendo llamadas recursivas.

Cuando entres en la rutina, desactiva los eventos, haz lo que quieras y activalos de nuevo justo antes de salir.

Private Sub Worksheet_Change(ByVal Target As Range)

Application.EnableEvents = False

If Target = Range("A1") Then

    Range("A2").Value = ""

    Range("A3").Value = ""

End If

If Target = Range("A2") Then

    Range("A3").Value = ""

End If

Application.EnableEvents = True

End Sub

IMF_RET

Visitame en https://InformaticaMuyFacil.com