Hola XYON:
He modificado un pocon las dos funciones de antes de la siguiente manera, y de este modo son ambas mas flexibles, la primera HmsDif devuelve la diferencia entre dos Fechas en formato hh:mm y como antes si es necesario el número de horas puede ser ilimitado por lo tanto podría devolver 354:34 por ejemplo, por omisión que va a ser lo normal, desprecia los segundos no obstante si se quieren tomar en cuenta y se le indica el True como tercer parámetro, devolverá hh:mm:ss
La segunda devuelve la suma de dos valores hh:mm:ss o hh:mm lo que pienso facilita el proceso de sumas ya que en tu caso si quieres sumar las horas sólo tienes que formar un bucle controlando que el número de horas de la casilla en el grid esté en formato hh:mm o bien hh:mm:ss
Dim TotalHoras As String
For Fila = 1 to Grid.Rows-1
TotalHoras = Hms( TotalHoras, Grid.TextMatrix(Fila, 7)
Next
' Asignas aquí la suma de Horas donde tu quieras.
Código vb:
Ver originalPublic Function HmsDif(ByVal FechaInicial As Date, FechaFinal As Date, Optional ConSegundos As Boolean = False) As String
' Devuelve la diferencia Horaria entre dos fechas en formato hh:mm:ss
' Tiene la posibilidad de devolver sólo hh:mm despreciando lo segundos
If Not IsDate(FechaInicial) Or Not IsDate(FechaFinal) Then Exit Function
Dim Horas As Long, Minutos As Long, Segundos As Long
Segundos = DateDiff("s", FechaInicial, FechaFinal)
Horas = Segundos \ 3600
Minutos = (Segundos - (Horas * 3600)) \ 60
Segundos = Segundos Mod 60
If ConSegundos Then
HmsDif = Format(Horas, "#") & ":" & Format(Minutos, "00") & ":" & Format(Segundos, "00")
Else
HmsDif = Format(Horas, "#") & ":" & Format(Minutos, "00")
End If
End Function
Public Function HmsSum(ByVal HmsUno As String, ByVal HmsDos As String) As String
' Suma dos valores recibidos en formato hh:mm:ss
' Si recibe formato hh:mm devuelve sólo hh:mm
Dim Uno() As String, Dos() As String
Dim Horas As Long, Minutos As Long, Segundos As Long, ConSegundos As Boolean
Dos = Split(HmsDos, ":")
IF Ubound(Dos) = 2 And HmsUno = "" Then HmsUno = "00:00:00"
IF Ubound(Dos) = 1 And HmsUno = "" Then HmsUno = "00:00"
Uno = Split(HmsUno, ":")
If UBound(Uno) = 2 And UBound(Dos) = 2 Then ConSegundos = True Else ConSegundos = False
Horas = Val(Uno(0)) + Val(Dos(0))
Minutos = Val(Uno(1)) + Val(Dos(1))
If ConSegundos Then Segundos = Val(Uno(2)) + Val(Dos(2))
If Segundos > 59 Then Minutos = Minutos + 1: Segundos = Segundos - 60
If Minutos > 59 Then Horas = Horas + 1: Minutos = Minutos - 60
If ConSegundos Then
HmsSum = Format(Horas, "#") & ":" & Format(Minutos, "00") & ":" & Format(Segundos, "00")
Else
HmsSum = Format(Horas, "#") & ":" & Format(Minutos, "00")
End If
End Function
Saludos