Vba cómo crear un bucle que vaya restando dos cantidades hasta que lleguen a 0

Me gustaría realizar un bucle que en cada vuelta le reste a "totalHoras" el valor de "acumTurnos" hasta que llegue a 0.

1 Respuesta

Respuesta
1

[Hola

¿Qué programa usas? Has marcado VB y VBA, que son distintos. VBA está en Excel, Word, etc., y de VB hay varias versiones ¿a cuál te refieres? Por cierto ¿en qué objeto o en dónde están esos valores de los que hablas?

Detalles, detalles para poder ayudarte.

Abraham Valencia

Gracias  Abraham Valencia por tu ayuda,

Estoy trabajando con el editor de vba de access. Tengo la variable FQTY_PHH que contiene las horas totales de trabajo que necesito para producir una referencia. y a este le quiero restar las horas de trabajo que tengo la maquina disponible que están el la varible hMhM es un acumulado que me va realizando un bucle For para leer por dia y por turno las horas que tengo disponibles y las acumula hasta que hM sea igual a FQTY_PHH. Esto indicara la hora que hemos finalizado la producción contemplando si hay turnos parados. 

Este es el código que tengo realizado para extraer las horas de maquina (dentro de este código quiero introducir un buque que le reste FQTY_PHH - hM  hasta que el valor sea 0

Dim q_hMaq As String, d As String, T As String
Dim i As Byte, hM As Byte, hT As Byte, hN As Byte
Dim FQTY_PHH As Double

'Vaciamos las variables
i = 0
Maq = rs("1")
FQTY_PHH = Round(rs("FQTY/PHH").Value, 2)

'Extraemos las horas disponibles de maq por dia y por cada turno
For i = 1 To 3
        d = Format(iniProd, "dd/mm/yyyy")
        T = ""
        'Ajuste de turno
        If (horaProd < "06:00:00") Then
                d = DateAdd("d", -1, d)
        End If
       'Con "i" recorremos los turnos, para pasarle como criterio a la consulta
       Select Case i
           Case Is = 1
                   T = "M"
          Case Is = 2
                    T = "T"
          Case Is = 3
                    T = "N"
        End Select
        'Consulta para extraer las horas de trabajo por parámetros
        If Not IsNull(DLookup(" horas ", "[Plan CalendarioCalculado_Base]", "Maq like '" & Maq & "'              and diaMesAny like '" & d & "' ")) Then
                     hM = DLookup(" horas ", "[Plan CalendarioCalculado_Base]", "Maq like '" & Maq & "'                           and diaMesAny like '" & d & "'and Turno like '" & T & "' ")
       End If
       'Imprimimos por dia los resultados (para hacer textear)
        a = ""
        a = T & " " & hM & " " & Maq & " " & "d= " & d & " " & iniProd & " " & (horaProd < "06:00:00") & " "          & horaProd & " " & FQTY_PHH & vbNewLine & a
        Next i
       Debug.Print a

Hola Abraham Valencia,

Ya he conseguido realizar el bucle.

Dim Acum as double

Do While FQTY_PHH  > hM

         acum = hM + hM

Loop

Pero no me sirve para lo que quiero hacer.  Porque de esta manera hM no actualizaría su valor y me sumaría constantemente el mismo. Así que sigo buscando como enfocarlo.

Muchas gracias por ayudarme,

Estimado para poder entender mejor y ayudarte sería bueno ver los datos y trabajar con ellos. Si puedes coloca la menos una parte en algún Drive y comparte por aquí el enlace.

Abraham Valencia

Muchas gracias,

Te avisare si necesito más soporte. Por ahora dejo así el condicional del bucle.

Un saludo :)

'Mientras bFound no sea verdadero (Salimos del bucle si hM es igual o mayor a FQTY_PHH)
Do While bFound = False
     acum = acum + hM
     If FQTY_PHH <= acum Then
            bFound = True
     End If


    'Salimos del bucle si hM es igual o mayor a FQTY_PHH
    If bFound = True Then Exit Do
Loop

Listo, hasta la próxima.

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas