** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Excel
  Mensajes nuevos Mensajes nuevos RSS - VBA INSTRUCCIONES IF ANIDADAS
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

VBA INSTRUCCIONES IF ANIDADAS

 Responder Responder
Autor
Mensaje
Fran2k Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 06/Mayo/2020
Localización: España
Estado: Sin conexión
Puntos: 0
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Fran2k Cita  ResponderRespuesta Enlace directo a este mensaje Tema: VBA INSTRUCCIONES IF ANIDADAS
    Enviado: 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.


Editado por Fran2k - 06/Mayo/2020 a las 15:09
Fran
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: Binghamton Jail
Estado: Sin conexión
Puntos: 3549
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita lbauluz Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 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
Hay un culto a la ignorancia y siempre lo ha habido y es alimentado por la falsa noción de que democracia significa que "mi ignorancia es tan buena como su conocimiento". (Isaac Asimov)
Arriba
Jordi-Albert Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Abril/2006
Localización: Alemania
Estado: Sin conexión
Puntos: 4317
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Jordi-Albert Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 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
Arriba
Fran2k Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 06/Mayo/2020
Localización: España
Estado: Sin conexión
Puntos: 0
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Fran2k Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 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
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: Binghamton Jail
Estado: Sin conexión
Puntos: 3549
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita lbauluz Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 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.
Hay un culto a la ignorancia y siempre lo ha habido y es alimentado por la falsa noción de que democracia significa que "mi ignorancia es tan buena como su conocimiento". (Isaac Asimov)
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable