Restar horas en VBA Excel 2003

Para Dante Amor

Buenos días, estaba pensando reemplazar la tradicional planilla para llevar registros por un formulario en Excel. He aquí mi consulta:

  • Tengo dos textbox en el cuál voy a ingresar la hora de inicio y hora fin
  • En un label, necesito que me muestre la diferencia, en minutos, de las horas de los textbox.
  • ¿Dónde está el problema principal? Cuando la hora de fin es menor a la hora de inicio.
    • En la planilla, lo que hago es usar una función SI: cuando la hora de fin es menor a la de inicio, le sumo 1 a la hora de fin y recién le resto la hora de inicio (a esta diferencia la multiplico por 1440 para que me de en minutos la diferencia)

Me gustaría saber la macro para usar en el formulario y que opere para que en el label me muestre la diferencia en minutos.

M_u_c_h_a_s    g_r_a_c_i_a_s

1 respuesta

Respuesta
1

H o l a:

¿Cómo es posible que la hora fin sea menor a la hora de inicio?

Lo anterior solamente es posible si la hora fin está en otro día subsecuente al día de inicio, es decir, empezaste el 4 de abril a las 2 de la tarde y terminas el 6 de abril a las 10 de la mañana. Las 10 de la mañana (hora fin) es menor a las 2 de la tarde (hora inicio), pero las 10 de la mañana corresponden a otro día.

Entonces analizando lo anterior necesitamos saber la fecha inicio y la hora inicio, la fecha fin y la hora fin, la fórmula es:

Diferencia =  (fecha fin + hora fin)  -  (fecha inicio + hora inicio)

Tienes que capturar en tu formulario los 4 datos, de esa forma podrás realizar la resta y obtener la diferencia.

En el formulario crea 4 textbox

Textbox1 para la fecha de inicio

Textbox2 para la hora de inicio

Textbox3 para la fecha fin

Textbox4 para la hora fin

El código sería así:

Private Sub CommandButton1_Click()
'Por.Dante Amor
    Set h = Sheets("Hoja1")
    h.[C4] = CDate(TextBox1)
    h.[D4] = CDate(TextBox2)
    h.[E4] = CDate(TextBox3)
    h.[F4] = CDate(TextBox4)
    Label1 = h.[I4]
End Sub

Lo complicado de utilizar fechas y horas en un textbox es que los datos quedan en texto, entonces se tienen que convertir a fecha, pero aun así eso es complicado.

Lo recomendable es pasar los textbox a celdas y dejar que la funcionalidad de excel realice las operaciones.

Entonces pon las siguientes fórmulas en la hoja1:

En la celda G4:

=TEXTO((E4+F4)-(C4+D4),"[hh]")

En la celda H4:

=DERECHA(TEXTO((E4+F4)-(C4+D4),"hh:mm"),2)

En la celda I4:

=VALOR(G4*60)+VALOR(H4)

La hoja1 será una hoja temporal que deberás tener para realizar estas operaciones.

El resultado queda en la celda I4, después se pasa el dato de la celda I4 al label.


' : )
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
' : )

Suele suceder que los procesos que se controlan comienzan el día 4 de abril a las 23:50 y terminal el 5 de abril a las 0:30... me es indistinto la fecha, porque los procesos a medir no son tan extensos, a lo sumo un par de minutos (como el ejemplo). Por eso no registramos fechas, solo horas de inicio  y fin y quería dejar el tema de las celdas y reemplazarlas por un formulario.

H o l a:

Pero si estás cambiando de un día a otro, entonces es necesario que pongas las fechas.

Desde luego vas a trabajar en un formulario, pero como te expliqué es difícil encontrar la diferencia utilizando textos, lo que vamos a hacer con las celdas es obtener el cálculo y presentarlo en el label, incluso la hoja1 puede estar oculta, solamente la vamos a utilizar para realizar el cálculo.

Espero haberme explicado, si no sabes cómo adaptar el cálculo en el formulario utilizando las fechas, las horas y la hoja, entonces envíame tu archivo y adapto toda la solución.

Si estás seguro que duran minutos, entonces podemos poner la fecha actual como fecha de inicio y la fecha fin como fecha actual + 1, de esa forma tenemos las 2 fechas y podemos realizar el cálculo.

':)
S a l u d o s . D a n t e A m o r
':) Si es lo que necesitas. Recuerda valorar la respuesta. G r a c i a s.

Encontré una manera, espero les sirva a aquellos que necesiten resolver una situación parecida:

Private Sub CommandButton1_Click()
Dim t0, t1 As Variant
t0 = Format(TextBox1, "hh:mm")
t1 = Format(TextBox2, "hh:mm")
If TimeValue(t1) > TimeValue(t0) Then
Label1 = (TimeValue(t1) - TimeValue(t0)) * 1440
Else
Label1 = (1 + TimeValue(t1) - TimeValue(t0)) * 1440
End If
End Sub

Saludos!

Gracias, buen aporte.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas