Hola, te comento las cuestiones a tener en cuenta:
Para insertar código usa el botón # que aparece en el editor del foro, así el código saldrá como código, de otra forma puede aparecer distorsionado. Para ello pulsa el botón # y escribe el código entre las etiquetas [ code ] ... [ / code] que aparecerán.
Text1 = CemEntregado se lee "Text1 toma el valor que tenga CemEntregado"
Esto es incorrecto, tú quieres que CemEntregado tome el valor de Text1, por tanto habría que escribir:
CemEntregado = Text1
Recordar siempre que a = b se lee como "a toma el valor que tenga b", o en el caso de
a = a * a se lee "a toma el valor que tenía a previmente multiplicado por el valor que tenía a previamente"
Por ejemplo a = 6
a = a * a
Supone que a ahora tiene el valor 6*6, es decir, a = 36
La siguiente cuestión:
CemEntregado = MsgBox("Cemento retirado de almacén") se lee de la siguiente manera "CemEntregado vale <<mostrar por pantalla Cemento retirado de almacén>>". Esto no es una sintaxis válida. ¿Qué necesitamos? Que en cada pasada del bucle se pida el dato de cemento entregado, esa es la condición que permite la evolución del bucle hasta llegar a poder salir de él. Si no hay evolución, el bucle se repite indefinidamente (bucle infinito) La sintaxis a emplear para realizar esta operación es:
CemEntregado = Val(InputBox("Introduzca cantidad de cemento entregado", "Entrega"))
Esto se lee: "La variable CemEntregado toma el valor numérico (Val) introducido por el usuario en una ventana de petición de datos (inputbox) donde el mensaje que se muestra al usuario es "Introduzca cantidad de cemento entregado" y el titulillo de la ventana es "Entrega".
El código nos quedaría entonces así (eliminamos el text1, puesto que no vamos a hacer uso del textbox, sino que la petición de datos se hará a través del inputbox, que es otra forma de pedir datos al usuario:
Option Explicit
Dim TotalCemento As Integer
Dim CemEntregado As Integer
Private Sub Form_load()
Form1.Caption = "Control de cemento en almacén"
Label1.Alignment = 2
Label1.Caption = "Por favor, introduzca el total de kilos de cemento a retirar:"
Command1.Caption = "Retirar cemento"
TotalCemento = 25000
End Sub
Private Sub Command1_Click()
Do While TotalCemento >= 6000
CemEntregado = Val(InputBox("Introduzca cantidad de cemento entregado", "Entrega"))
TotalCemento = TotalCemento - CemEntregado
Loop
Label2.Alignment = 2
Label2.FontBold = True
Label2 = "El inventario ha bajado de 6000 kilos de cemento. Por favor, comuníquelo al almacén"
End Sub
También nos podemos plantear la opción de hacerlo a través del textBox. Pero en ese caso no podríamos usar un bucle do while, porque no tendríamos forma de salir de él, la repetición se produciría porque el usuario iría haciendo click muchas veces en el commandbutton hasta llegar a cumplirse la condición de terminación. En este momento mostraríamos un mensaje indicando que ya no se puede retirar más cemento:
Option Explicit
Dim TotalCemento As Integer
Dim CemEntregado As Integer
Private Sub Form_load()
Text1 = "" 'Limpiamos el text1
Label2 = "" 'Limpiamos el text2
Form1.Caption = "Control de cemento en almacén"
Label1.Alignment = 2
Label1.Caption = "Por favor, introduzca el total de kilos de cemento a retirar:"
Command1.Caption = "Retirar cemento"
TotalCemento = 25000
End Sub
Private Sub Command1_Click()
If TotalCemento >= 6000 Then
CemEntregado = Text1
TotalCemento = TotalCemento - CemEntregado
MsgBox ("Se han retirado " & CemEntregado & " kilos de cemento y quedan " & TotalCemento & " kgs")
Text1 = "" 'Limpiamos el text1
Else
MsgBox ("El inventario ha bajado de 6000 kilos de cemento. Por favor, comuníquelo al almacén")
End If
End Sub
¿Es mejor hacerlo con un bucle do while o mediante el commandbutton? Depende de lo que se pretenda. A veces hay múltiples maneras de hacer las cosas y ninguna de ellas puede decirse que sea mejor que otra, simplemente serían distintas alternativas. Posiblemente este problema se pueda resolver de más maneras, muchas veces hay múltiples alternativas. En este caso al ser un ejercicio fíjate en lo que pida el enunciado y hazlo de la forma que se adapte mejor a lo que indique el enunciado.
Quizás me he alargado demasiado, si hay algo que no se entienda dímelo. Saludos.