Saltar al contenido

Formula en vb para calcular horas transcurridas entre dos fechas y dos horas distintas


Recommended Posts

publicado

Buenos días de nuevo.

Siguiendo con el formulario de la orden de trabajo, se me presenta otro tema que he buscado en el foro y he visto algunos parecidos, pero tampoco he conseguido adaptarlo a mi caso. Me explico; necesito calcular las horas transcurridas entre dos fechas y horas distintas. y que vuelque el valor en un textbox.

Subo un fichero con un pequeño ejemplo de lo que necesito.

Un saludo y muchas gracias de antemano.

Prueba calculo horas transcurridas.rar

publicado

Hola Blas, bajé el ejemplo y creo haberlo resuelto. No pude subirlo porque un mensaje dice que no se admite la extensión del archivo (...que es la misma extensión que tiene el original que lograste subir... o sea, no entiendo qué pasa)

De modo que te copio el código a continuación ( y así lo hago público para lectura de quien le interese)

Lo que hice es hacer una UDF llamada CalculoHoras que devuelve el tiempo transcurrido. Y en el botón de Validar, antepuse una llamada a esa UDF.

El código es:

Function CalculoHoras(FechaInicial As String, HoraInicio As String, FechaFinal As String, HoraFinal As String) As String

'La cantidad de horas transcurridas entre dos horarios de diferentes fechas _

la interpreto de la siguiente manera: _

Es la cantidad de horas transcurridas desde el primer día hasta el útimo día _

excepto la parte del día que corresponde desde la hora cero del primer día hasta la hora de inicio _

y excepto la parte del día de la fecha fin desde hora fin hasta el final del día

'Entonces:

Dim ch As Double

fi = CDate(FechaInicial)

hi = CDate(HoraInicio)

ff = CDate(FechaFinal)

hf = CDate(HoraFinal)

ch = Abs(ff - fi - hi - (24 - hf)) 'Este es el cálculo

CalculoHoras = Round(ch, 2) 'Lo escribe redondeando a dos decimales

End Function

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

EL BOTÓN DE VALIDAR:

Private Sub CommandButton1_Click()

TextBox5.Value = CStr(CalculoHoras(TextBox1.Value, TextBox2.Value, TextBox3.Value, TextBox4.Value))

Selection.EntireRow.Insert

TextBox1 = Empty

TextBox2 = Empty

TextBox3 = Empty

TextBox4 = Empty

TextBox5 = Empty

TextBox1.SetFocus

End Sub

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Espero que te haya servido

publicado

Buenos días.

En primer lugar ofrecer mis disculpas por la demora en contestar.

Pityon, muchas gracias por tu ayuda. He probado tal y como me indicas, incluyendo en código en la UDF y el resultado que obtengo del cálculo de horas no es correcto. Debe de fallar algo en la formula del cálculo, he probado cambiando varias veces la formula pero no lo he conseguido.

publicado

Buenas de nuevo.

Macro Antonio, con el código que has incluido funciona, ¿podría funcionar sin pulsar el botón de calcular?, es decir al incluir la hora fin y pulsar intro o tabulador que apareciese el calculo en el textbox y en formato H:mm.

Un saludo y muchas gracias tanto a ti como a Pityon y todos los que lideráis éste foro por vuestra gran ayuda y tiempo que le dedicáis.

publicado

Muchas gracias Macro Antonio. Ahora si se ve el resultado en el textbox directamente, pero hay un pequeño problema de formato que no entiendo porque, cuando el resultado son horas completas (2:00, 26:00 etc.) en el texbox aparecen como 1:60 en lugar de 2:00, 25:60 en lugar de 26:00, es decir la última hora se refleja como 60 minutos, sin embargo cuando vuelca los datos a la hoja excel, si que aparecen bien. ¿Se podría solucionar ésto?

Un saludo y disculpa por mis bajos conocimientos del VB.

  • Silvia bloqueó este tema

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.