Problema con el bucle while en VBA

Resuelto
buffalo31 Mensajes publicados 29 Estado Miembro -  
buffalo31 Mensajes publicados 29 Estado Miembro -
Bonjour,

Estoy haciendo un pequeño código en VBA para Excel, pero tengo un problema con el bucle while que no integra las dos condiciones que le asocié:

ac = Worksheets("Interface").Cells(3, 3).Value
eng = Worksheets("Interface").Cells(4, 3).Value

While Worksheets("DataSheet").Cells(i, 1).Value <> ac And Worksheets("DataSheet").Cells(i, 2).Value <> eng
i = i + 1
Wend
......
.......
Cuando ejecuto el código, tan pronto como se verifica la primera condición, sale del bucle sin tener en cuenta la segunda condición.

Entonces, ¿cómo hacer para que mi bucle while tenga en cuenta ambas condiciones? Intenté poner paréntesis para separar las dos condiciones, pero no cambia nada.

Gracias de antemano
Configuración: Windows XP Internet Explorer 6.0

3 respuestas

le père
 
Hola

el while de VBA maneja perfectamente un "y" entre dos condiciones, creo que más bien eres tú quien tiene un pequeño problema para expresar lo que quieres ;)

¿Puedes dar algunos ejemplos (con valores) de casos en los que el bucle debe continuar y otros en los que debe detenerse? Probablemente te darás cuenta tú mismo de tu error.
1
Usuario anónimo
 


Mientras ((Hojas de cálculo("DataSheet").Celdas(i, 1).Valor <> ac) Y (Hojas de cálculo("DataSheet").Celdas(i, 2).Valor <> eng ))

pero, de lo contrario, tiene razón sobre los operadores lógicos en VBA, aquí está el curso

https://www.commentcamarche.net/contents/1188-vbscript-les-operateurs

--
Las personas que dicen que Windows es malo y que continúan usándolo me hacen reír...
El 95% de los errores provienen de lo que hay entre el teclado y la silla.
0
buffalo31 Mensajes publicados 29 Estado Miembro
 
He intentado con los paréntesis como indica, pero todavía no cambia. Aquí hay un ejemplo:

En Worksheets("DataSheet") .Cells(i, 1) tengo aviones y en Worksheets("DataSheet") .Cells(i, 2) tengo motores.

En una hoja llamada Worksheets("Interface") ingreso un avión (ac) y un motor (eng) respectivamente "B747" y "PW4000"

La idea es recuperar la línea i de Worksheets("DataSheet") donde Worksheets("DataSheet") .Cells(i, 1) = "B747" y Worksheets("DataSheet") .Cells(i, 2) = "PW4000" para hacer otros tratamientos.

Cuando ingreso el motor que corresponde al avión, no hay problema.

Pero cuando ingreso un motor que no corresponde al avión, espero que no encuentre nada, incluso podría poner una condición para salir del bucle. Pero para mi gran sorpresa, recupera la línea i de la primera condición que se verifica.

Así que en resumen, las dos condiciones parecen disociadas, lo que no entiendo.
0
le père
 
quieres encontrar Worksheets("DataSheet") .Cells(i, 1) = "B747" y Worksheets("DataSheet") .Cells(i, 2) = "PW4000"
Entonces hay que hacer un bucle mientras Worksheets("DataSheet") .Cells(i, 1) <> "B747" O Worksheets("DataSheet") .Cells(i, 2) <> "PW4000"
0
buffalo31 Mensajes publicados 29 Estado Miembro
 
¡Genial, funcionó! Me estaba equivocando en la negación de mis operadores lógicos, jaja. Un poco de repaso en lógica matemática no me vendría mal.
Una vez más, gracias, gracias y hasta pronto.
0