Código de horas en visual basic...

Tema en 'Programación' comenzado por Spaguetti, 14/4/09.

Estado del tema:
No está abierto para más respuestas.
  1. Spaguetti

    Spaguetti Nuevo Miembro Miembro

    Hola a todos.

    Tengo dudas, agradeceré la atención y ayuda.

    Ejemplo de lo que se me pide:

    --Un trabajador labora de 7:00 a.m. a 3:00 p.m.

    --Hoy entró a laborar a las 6:50:26 a.m. y salió a las 4:36:56 p.m.

    --Debo capturar en 1 textbox la hora de entrada / en otro textbox la hora de salida (con segundos incluídos). Después de esto un comandbutton (calcular) y otros 3 textbox que me deben arrojar el total de tiempo laborado en horas / minutos / segundos...

    En el ejemplo de 6:50:26 a.m. a 4:36:56 p.m., se entiende que el trabajador laboró:

    9 Horas, 46 Minutos, 30 Segundos

    Gracias.
     
  2. rob1104

    rob1104 Super Moderador Super Moderador

    Hola, creo que ya se había tratado esto hace tiempo AQUI.

    Leiste mi ultimo post? tienes algúna duda concreta?

    Saludos
     
  3. Spaguetti

    Spaguetti Nuevo Miembro Miembro

    Agradezco tus observaciones, pero realmente no es igual...

    Estoy de acuerdo que mi duda anterior es bastante similar pero en la primera, yo capturaba un número x de segundos y se convertían a HH/MM/SS, en ésta nueva discusión deseo capturar tiempo (no, números) algo así: 12:36:27, y que visual me diga si laboré mis 8 horas promedio o me excedí y quiero que si me excedí, quede corto o el tiempo que haya laborado me muestre en formato de HH/MM/SS

    Como expongo anteriormente, soy principiante.

    En la práctica de segundos utilicé MOD

    Ahora en ésta nueva necesito el adddate y el mod pero no sé como hacerlo.
     
  4. rob1104

    rob1104 Super Moderador Super Moderador

    Tienes razon spaghetti, es muy similar, pero de hecho este puede ser mas facil, no creo que sea necesario el adddate, con la funcion timevalue se puede hacer facilmente, mira este ejemplo que hice e intenta adaptarlo:
    Código:
    Private Sub Form_Load()
    
        Dim horaentrada As Variant
    
        Dim horasalida As Variant
    
        Dim tiempotrabajado As Variant
    
        horaentrada = Format("9:00:00", "hh:mm:ss")
    
        horasalida = Format("16:30:20", "hh:mm:ss")
    
        MsgBox "Trabajaste " & Format(TimeValue(horasalida) - TimeValue(horaentrada), "hh:mm:ss") & " horas"
    
    End Sub
    Saludos
     
  5. Spaguetti

    Spaguetti Nuevo Miembro Miembro

    Hola rob1104, tu código me ha ayudado mucho, en verdad te lo agradezco.

    Desgraciadamente aún no logro crear lo que yo deseo:

    Si sigo tu ejemplo, cada que necesite calcular otros horarios debo ingresar a la ventana de código y modificar "9:00:00" y "16:30:20"

    Deseo hacerlo más visual, necesito 6 textbox, 3 para el horario de entrada (1 para HH, 2 para MM, 3 para SS) y 3 para el horario de salida (1 para HH, 2 para MM, 3 para SS). Cuando de clic en el botón "calcular" me muestre en una Label la diferencia de tiempo tal y como tu lo hiciste en tu MsgBox.

    Aún sigo investigando por Internet, pero espero recibir más ayuda en este foro, muchas gracias.

    Private Sub Form_Load()

    Dim horaentrada As Variant

    Dim horasalida As Variant

    Dim tiempotrabajado As Variant

    horaentrada = Format("9:00:00", "hh:mm:ss")

    horasalida = Format("16:30:20", "hh:mm:ss")

    MsgBox "Trabajaste " & Format(TimeValue(horasalida) - TimeValue(horaentrada), "hh:mm:ss") & " horas"

    End Sub
     
  6. Spaguetti

    Spaguetti Nuevo Miembro Miembro

    De hecho parte de tu código me ha servido mucho, el problema que tengo es como (con que función o algo por el estilo) hacer para que los textbox me reconozcan la fecha (Recordemos que son 3 textbox para cada parte de la fecha) y después puedan unirla (recordemos que si en 3 textbox capturaremos HH,MM y SS, la fecha queda partida en tres) para que se muestre en un label...
     
  7. Spaguetti

    Spaguetti Nuevo Miembro Miembro

    He resuelto mi problema de una forma demasiado sencilla (aunque para mí ha sido muy complicado).

    Me falta un sólo detalle, mismo que no descansaré hasta encontrarlo.

    Tan sólo necesité:

    3 Textbox

    3 CommandButton

    3 Label

    El código es el siguiente:

    Option Explicit

    Private Sub Command1_Click()

    'Se declara una variable como cadena de caractéres

    Dim Diferencia As String

    'CDate reconoce literales de fecha y literales de hora así como 'números que están dentro del intervalo de fechas aceptables.

    Diferencia = CDate(CDate(Text1.Text) - CDate(Text2.Text))

    End Sub

    Private Sub Command2_Click()

    Text1.Text = Empty

    Text2.Text = Empty

    Text3.Text = Empty

    Text1.SetFocus

    End Sub

    Private Sub Command3_Click()

    Unload Me

    End Sub

    Alguna vez (alguién de este foro) me dijeron que era bueno publicar la respuesta para compartirla y que sirviera de referencia a otros usuarios.

    A pesar de mi "éxito", necesito que mis textbox tengan el formato de hora...pór ejemplo: si capturo 154523 el textbox lo convierta a 15:45:23, estoy usando la propiedad DataFormat pero aún así debo capturar mis números con puntos (15:45:23), si no los capturo así, cuando calculo me arroja un resultado: 24/05/1965 (me regresa una fecha)...

    También, cuando capturo con puntos (15:45:23) me arroja, efectivamente, el tiempo laborado en HH:MM:SS tal como lo quiero, pero el pequeño detalle es que me aparece a.m. o p.m.

    Gracias rob1104.
     
  8. Spaguetti

    Spaguetti Nuevo Miembro Miembro

    Hasta este post he logrado que en tiempo total laborado ya no me aparezca a.m. y p.m. y lo hice de la manera más sencilla que hay: límite la propiedad MaxLength a 8 caracteres (1h 2h, 3:, 4M 5M, 6:, 7S 8S)

    Sigo informando...
     
Estado del tema:
No está abierto para más respuestas.

Comparte esta página