vba - Do while con dos codiciones |
Responder |
Autor | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pitxiku
Colaborador Unido: 27/Septiembre/2017 Localización: En mi casa Estado: Sin conexión Puntos: 1510 |
Opciones de entrada
Gracias(0)
Enviado: 04/Enero/2021 a las 20:04 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Los bucles Do While, primero comprueban las condiciones, y si se cumplen, permiten que se ejecute lo que haya dentro.
En tu caso, primero te colocas en la celda E2. Después, verificas si tienes los valores 4 y "Este" en 2 columnas de la fila de la celda activa. Como el valor "Este" se cumple, no entras en el bucle y vas directamente a la primera instrucción después del bucle. Por todo ello, te están dando otras posibilidades para que entres en el bucle. |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
jfca283
Asiduo Unido: 05/Junio/2008 Localización: Chile Estado: Sin conexión Puntos: 244 |
Opciones de entrada
Gracias(0)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Buenas, Usando Do Until no presenta problemas el bucle. Cuando no cumple la condición,simplemente se detiene. El usar For y Next me funciona. El tema es que no logro apilar dos condiciones con ActiveCell y Do While. Si dejo solo una de ella, el Do While corre sin problemas.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
AnSanVal
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 16/Marzo/2005 Localización: España Estado: Sin conexión Puntos: 5970 |
Opciones de entrada
Gracias(0)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
- El incremento de fila (ActiveCell.Offset(1, 0).Select) no debe ir dentro de la condición, pues cundo no cumpla no habrá incremento (ni bucle). - No es necesario (ni conveniente) seleccionar celdas para realizar las acciones. - Sin entrar a valorar las condiciones, prueba con: Private Sub bucle_wh() Dim celda As Range For Each celda In Range("E2:E13") If (celda.Offset(0, -1) <> 4) And (celda.Value <> "Este") And (celda.Value <> "") Then celda.Offset(0, -4).Interior.ColorIndex = 1 celda.Offset(0, 3).Value = "Estearn" End If Next celda End Sub |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Saludos desde Tenerife.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
jfca283
Asiduo Unido: 05/Junio/2008 Localización: Chile Estado: Sin conexión Puntos: 244 |
Opciones de entrada
Gracias(0)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Traté y tampoco funciona.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
jfca283
Asiduo Unido: 05/Junio/2008 Localización: Chile Estado: Sin conexión Puntos: 244 |
Opciones de entrada
Gracias(0)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
He tratado y no funciona esa sintax.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
lbauluz
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 29/Marzo/2005 Localización: La Gloria Estado: Sin conexión Puntos: 3849 |
Opciones de entrada
Gracias(0)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Muy buenas,
Por lo que veo es que la condición nunca se cumple, CREO que lo que deberías poner es Do While (ActiveCell.Offset(0, -1) <> 4) And (ActiveCell.Value = "Este") Pero solo es lo que yo entiendo. Luis
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
El Búho es un pajarraco
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 13990 |
Opciones de entrada
Gracias(0)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
¿Y si unificas la condición?
Do While ((ActiveCell.Offset(0, -1) <> 4) And (ActiveCell.Value <> "Este"))
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
jfca283
Asiduo Unido: 05/Junio/2008 Localización: Chile Estado: Sin conexión Puntos: 244 |
Opciones de entrada
Gracias(0)
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Hola, Traté de hacer un loop con while usando dos condiciones uniendo con AND. Private Sub bucle_wh() Range("E2").Select Do While (ActiveCell.Offset(0, -1) <> 4) And (ActiveCell.Value <> "Este") If ActiveCell.Value = "" Then Exit Do ActiveCell.Offset(0, -4).Interior.ColorIndex = 1 ActiveCell.Offset(0, 3).Value = "Estearn" ActiveCell.Offset(1, 0).Select Loop End Sub Sin embargo, no me funciona. No tengo problemas con hacer uno con until. Tampoco en hacer que funcione aplicando una sola condición. Pero tomando en cuenta ambas, nunca corre.¿Qué estoy haciendo mal? De antemano, muchas gracias por su ayuda. Acá el set de datos al que quiero aplicar esto para generalizar.
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Responder | |
Tweet
|
Ir al foro | Permisos de foro Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |