Excel - Do While con valores de textbox y celdas vba

 
Vista:

Do While con valores de textbox y celdas vba

Publicado por Maria Camila (2 intervenciones) el 08/03/2017 17:44:32
Hola a todos,

Tengo un código en vba excel que busca que una vez se seleccione un valor en un comboBox, busque ese mismo valor en una hoja de cálculo y compare el valor que se ingresó a un textbox con el de la celda que se encuentra dos columnas a la derecha. Siempre que el valor del textbox sea mayor al de la celda, se debe sumar 24 a dicha celda y restar 1 a otra celda, hasta que ya sean iguales o el valor de la celda sea mayor al del textbox, se debe restar el valor del textbox con el que quedó la celda.

Esto es para el egreso de cajas o unidades en un inventario. La caja trae 24 unidades, si hay x cajas y unas pocas unidades sueltas y quiero egresar unas unidades pero con las que tengo sueltas no me alcanza, tendría que restarle a cajas, sumarle a unidades y ahí si restarle a unidades lo que quiero egresar. Diferencio entre los valores del combobox, ya que las unidades por caja de cada producto cambian de acuerdo a la presentación.

Al ejecutar el código, deja de funcionar excel y tengo que cerrarlo bruscamente, tal vez me puedan ayudar. Gracias.

El código que llevo, con respecto a esa parte, se muestra a continuación:

Do While True
producto = 4
If (Worksheets("PRODUCTOS").Cells(producto, 1).Text = (Me.ComboBox1.Text)) Then Exit Do
producto = producto + 1

Loop

If (ComboBox1 = "Vinagre Blanco 500 ml" Or ComboBox1 = "Vinagre Rojo 500 ml" Or ComboBox1 = "Vinagre Frutas" Or ComboBox1 = "Vinagre Limón" Or ComboBox1 = "Vinagre Manzana 500 ml" Or ComboBox1 = "Multiusos 500 ml" Or ComboBox1 = "Vinagre Blanco 900 ml" Or ComboBox1 = "Vinagre Rojo 900 ml") Then

Do While True

If (Worksheets("PRODUCTOS").Cells(producto, 1).Offset(0, 2).Value < TextBox10.Value) Then Exit Do

Worksheets("PRODUCTOS").Cells(producto, 1).Offset(0, 1).Value = Worksheets("PRODUCTOS").Cells(producto, 1).Offset(0, 1).Value - 1
Worksheets("PRODUCTOS").Cells(producto, 1).Offset(0, 2).Value = Worksheets("PRODUCTOS").Cells(producto, 1).Offset(0, 2).Value + 24

Loop
Worksheets("PRODUCTOS").Cells(producto, 1).Offset(0, 2) = Worksheets("PRODUCTOS").Cells(producto, 1).Offset(0, 2) - TextBox10.Value

If (Worksheets("PRODUCTOS").Cells(producto, 1).Offset(0, 2) >= TextBox10.Value) Then
Worksheets("PRODUCTOS").Cells(producto, 1).Offset(0, 2) = Worksheets("PRODUCTOS").Cells(producto, 1).Offset(0, 2) - TextBox10.Value
Worksheets("PRODUCTOS").Cells(producto, 1).Offset(0, 1) = Worksheets("PRODUCTOS").Cells(producto, 1).Offset(0, 1) - TextBox8.Value
End If


End If
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Do While con valores de textbox y celdas vba

Publicado por JuanC (1237 intervenciones) el 08/03/2017 17:50:55
sin mucho análisis veo que estás usando un bucle infinito: Do While True ... Loop
seguramente la única condición de salida que pusiste no se cumple jamás y por eso se cuelga excel...
deberías mejorar el código poniendo otra condición de salida del bucle o revisar tu lógica...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Do While con valores de textbox y celdas vba

Publicado por Antoni Masana (2477 intervenciones) el 09/03/2017 07:01:45
El primer bucle esta mal planteado, esta es la forma correca:

1
2
3
4
producto = 4
Do While (Worksheets("PRODUCTOS").Cells(producto, 1).Text <> (Me.ComboBox1.Text))
   producto = producto + 1
Loop

O si lo prefieres

1
2
3
4
producto = 4
Do Until (Worksheets("PRODUCTOS").Cells(producto, 1).Text = (Me.ComboBox1.Text))
   producto = producto + 1
Loop

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Do While con valores de textbox y celdas vba

Publicado por Maria Camila (2 intervenciones) el 13/03/2017 17:05:37
Muchas gracias por el aporte, sin embargo hasta esa parte me funciona muy bien, el problema es en el siguiente While, se queda eternamente sumando 24 y restando 1 a las celdas, como si no volviera a evaluar para darse cuenta que ya el valor que tengo en la celda es mayor a mi textbox y puede salir del bucle. No sé que error pueda tener, ya lo intenté con Do While, Do While True, Do until, y el problema es el mismo, las condición para salir me parece que está bien y no doy con el error.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar