Imprimir página | Cerrar ventana

VBA INSTRUCCIONES IF ANIDADAS

Impreso de: Foro de Access y VBA
Categoría: Otros de Microsoft: Windows y Office
Nombre del foro: Excel
Descripción del foro: Foro de Excel y VBA de Excel
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=85248
Fecha de impresión: 29/Marzo/2024 a las 06:02


Tema: VBA INSTRUCCIONES IF ANIDADAS
Publicado por: Fran2k
Asunto: VBA INSTRUCCIONES IF ANIDADAS
Fecha de publicación: 06/Mayo/2020 a las 15:04
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.


-------------
Fran



Respuestas:
Publicado por: lbauluz
Fecha de publicación: 07/Mayo/2020 a las 01:00
Buenas

Asi a ojo lo que tienes es:

Si cambia un dato en la hoja ejecuta esta funcion, donde se cambia un dato en la hoka... por lo cual se ejecuta la funcion, que cambia un dato en la hoja, por lo que se ejecuta la funcion.... y asi hasta saturar la memoria,de ahi el error que te da.

En otras palabras, en cuanto haces un cambio en la hoja generas un bucle infinito que satura la memoria.



Prueba algo asi

If Target.Value = Range("A1").Value And Range("A2").Value <> "" Then
    Range("A2").Value = ""
End If
If Target.Value = Range("A2").Value And Range("A3").Value <> "" Then
    Range("A3").Value = ""
End If


Con eso que he hecho evitas cambiar lo que ya esta cambiado, por lo que no se llama otra vez la funcion

Por ciert, tienes que comparar siempre value, como te he annadido

Un saludo.

Luis


-------------
El Búho es un pajarraco


Publicado por: Jordi-Albert
Fecha de publicación: 07/Mayo/2020 a las 05:34
Si el error es como dice Luis, añadd

Application.enableEvents =False

Al inicio de la función y

Application.EnableEvents = True

al final

-------------
Nota: Jordi-Albert es, todo él, un nombre. Mi nombre


Publicado por: Fran2k
Fecha de publicación: 07/Mayo/2020 a las 13:55
Buenos días,

Gracias por tu ayuda.
Y si cuando cambie el valor de la celda A2, en vez de borrarme la celda A3 quiero que me la recalcule siendo el contenido de A3 una fórmula+lista desplegable del tipo =SI($A$2="España";"ole";$C$1:$C$5), ¿qué debo poner?


-------------
Fran


Publicado por: lbauluz
Fecha de publicación: 07/Mayo/2020 a las 22:34
Pues algo similar a 

 Range("A3").Formula = "=IF($A$2=""España"",""Ole"", ""Buuuuuuu"")"



Ten en cuenta que desde VBA se funciona en inglés, por lo que tanto el comando (if en lugar de si) como los separadores (coma en lugar de punto y coma) deben ir de acuerdo a la configuración en inglés

Un saludo.


-------------
El Búho es un pajarraco



Imprimir página | Cerrar ventana