Ver Mensaje Individual
  #8 (permalink)  
Antiguo 21/04/2010, 15:33
Avatar de erbuson
erbuson
 
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: Sumar filas en un MSFlexgrid

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 original
  1. Public Function HmsDif(ByVal FechaInicial As Date, FechaFinal As Date, Optional ConSegundos As Boolean = False) As String
  2.   ' Devuelve la diferencia Horaria entre dos fechas en formato hh:mm:ss
  3.  ' Tiene la posibilidad de devolver sólo hh:mm despreciando lo segundos
  4.  If Not IsDate(FechaInicial) Or Not IsDate(FechaFinal) Then Exit Function
  5.   Dim Horas As Long, Minutos As Long, Segundos As Long
  6.   Segundos = DateDiff("s", FechaInicial, FechaFinal)
  7.   Horas = Segundos \ 3600
  8.   Minutos = (Segundos - (Horas * 3600)) \ 60
  9.   Segundos = Segundos Mod 60
  10.   If ConSegundos Then
  11.     HmsDif = Format(Horas, "#") & ":" & Format(Minutos, "00") & ":" & Format(Segundos, "00")
  12.   Else
  13.     HmsDif = Format(Horas, "#") & ":" & Format(Minutos, "00")
  14.   End If
  15. End Function
  16.  
  17. Public Function HmsSum(ByVal HmsUno As String, ByVal HmsDos As String) As String
  18.   ' Suma dos valores recibidos en formato hh:mm:ss
  19.  ' Si recibe formato hh:mm devuelve sólo hh:mm
  20.  Dim Uno() As String, Dos() As String
  21.   Dim Horas As Long, Minutos As Long, Segundos As Long, ConSegundos As Boolean
  22.   Dos = Split(HmsDos, ":")
  23.   IF Ubound(Dos) = 2 And HmsUno = "" Then HmsUno = "00:00:00"
  24.   IF Ubound(Dos) = 1 And HmsUno = "" Then HmsUno = "00:00"
  25.   Uno = Split(HmsUno, ":")
  26.   If UBound(Uno) = 2 And UBound(Dos) = 2 Then ConSegundos = True Else ConSegundos = False
  27.   Horas = Val(Uno(0)) + Val(Dos(0))
  28.   Minutos = Val(Uno(1)) + Val(Dos(1))
  29.   If ConSegundos Then Segundos = Val(Uno(2)) + Val(Dos(2))
  30.   If Segundos > 59 Then Minutos = Minutos + 1: Segundos = Segundos - 60
  31.   If Minutos > 59 Then Horas = Horas + 1: Minutos = Minutos - 60
  32.   If ConSegundos Then
  33.     HmsSum = Format(Horas, "#") & ":" & Format(Minutos, "00") & ":" & Format(Segundos, "00")
  34.   Else
  35.     HmsSum = Format(Horas, "#") & ":" & Format(Minutos, "00")
  36.   End If
  37. End Function

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...