Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Sumar filas en un MSFlexgrid

Estas en el tema de Sumar filas en un MSFlexgrid en el foro de Visual Basic clásico en Foros del Web. hola! Tengo un Msflexgrid y quiero sumar todas las celdas de una Fila, he realizado este codigo pero me da el error de "No coinciden ...
  #1 (permalink)  
Antiguo 21/04/2010, 06:45
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 15 años, 1 mes
Puntos: 0
Sumar filas en un MSFlexgrid

hola!

Tengo un Msflexgrid y quiero sumar todas las celdas de una Fila, he realizado este codigo pero me da el error de "No coinciden los datos" el codigo es este :

Código vb:
Ver original
  1. ' ---------------------------------------------------------------------------
  2. ' \\ -- Funición sumar totales diarios.
  3. ' ---------------------------------------------------------------------------
  4.  
  5. Private Sub sumar()
  6.          
  7.          Dim Columna As Integer
  8.          Dim total As Date
  9.          
  10.          
  11. With MSFlexGrid
  12.              For Columna = 0 To .Cols - 1
  13.                  ' Sumar, obteniendo el valor de la celda con TextMatrix
  14.                 total = total + .TextMatrix(7, Columna)
  15.              Next
  16. End With
  17.  
  18.  
  19. ' retornar el total de la suma a la función
  20. Totalhoras_C = total
  21.  
  22. End Sub


y naturalmente Totalhoras_C tambien es "Dim Totalhoras_C As Date" por lo que no entiendo lo del error ¿Porque para extraer los datos de un Msflexgrid se hace asi?

Ah! Por cierto la fila que deseo sumar es la 8ª es decir la número 7.

Muchas gracias.
  #2 (permalink)  
Antiguo 21/04/2010, 07:48
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 11 años, 5 meses
Puntos: 53
Respuesta: Sumar filas en un MSFlexgrid

Hola Xyon

Como dice la célebre frase: Con la iglesia hemos topado, amigo Sancho.

Hasta ahora no he tenido necesidad de hacer este tipo de cálculos que tu estas haciendo como el de Sumar horas, pero te comento que por ejemplo si pruebas a efectuar esta suma:

Msgbox Format(cdate("12:25") + cdate("15:40"),"hh:mm") veras que el resultado devuelto es 04:05 y tu preguntaras ¿ Porque ? pues porque gracias a Dios para los currantes los días tienen sólo 24 horas he ahí el problema.

Los valores de fechas pueden sumarse y restarse pero obviamente no es tan fácil y debe determinarse como. Como no se trata de reinventar la rueda, debemos utilizar las herramientas de VB para que haga el trabajo sucio y después nosotros actuar en consecuencia.

Si prevees que la hora de inicio y la hora de fin pueden estar en días diferentes, debes guardar el valor de Now que es la fecha AHORA con fecha y hora y de este modo puedes calcular el tiempo transcurrido entre hora de inicio y hora de fin.

Minutos = DateDiff("n", HoraInicio, HoraFin) esta función te devolverá el número de minutos transcurridos entre las dos fecha, a partir de ahí toca dividir para saber las horas enteras y los minutos.

Se trata de hacer una función que agilice el trabajo, tal vez alguien la tenga ya hecha pero si no tendremos que ponernos a ello.

En cuenta al error de tipos en la suma que efectúas en el Grid el error puede deberse a problema de datos de fecha.

Antes de Sumar o Restar fechas es conveniente hacer la comprobación IsDate en la función para confirmar que los valores que utilizamos son Fechas

A ver quien nos da antes con esta función, aunque estoy casi seguro que nuestro amigo pkj ya esta en ello.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #3 (permalink)  
Antiguo 21/04/2010, 08:03
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Sumar filas en un MSFlexgrid

Hola erbunson!

Como he leido por ahi se que eres un forofo o apasionado del MsFlexgrid y espero que con mis chorrraditas te surjan retos que supongo ya habras tenido 1001 pero siempre sale uno nuevo. Bueno comentas que habria que verificar primero si los datos son lsDate, ¿esta funcion es similar a IsNumeric, se usa igual? aunque voy a rascar info es otro de los comandos que desconozco.
Referente a lo de sumar tiempos entre dos dias es algo que ya habia tenido en cuenta, de ahi el porque en cada registro aparte de la hora de entrada y de salida entro dia, fecha, año y tiempo(tiempo transcurrido) que es aqui donde lo calculo, en la Grilla solo sumo el total de cada dia ejemplo .. Lunes 12:00, martes 8:33, viernes 15:43 y mi totalhoras_C deberia ser = 36:13.

De si se recupera o no del Grill ¿Es asi?

Un saludo

Y gracias por adelantao a los dos
  #4 (permalink)  
Antiguo 21/04/2010, 08:30
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Sumar filas en un MSFlexgrid

Hola otra vez!

Una pregunta.: ¿Las celdas de un MsFlexgrid como las considera VB como texto o indiferente a lo introducido? es por si he de convertir lo introducido por Val :

total = total + Val(.TextMatrix(7, Columna)) en vez de

total = total +.TextMatrix(7, Columna)

Un saludo
  #5 (permalink)  
Antiguo 21/04/2010, 08:36
Avatar de Sergio18  
Fecha de Ingreso: abril-2010
Ubicación: No quieras saberlo
Mensajes: 94
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: Sumar filas en un MSFlexgrid

Hola XYON126
Creo que este codigo te servira,sirve para sumar la columna seleccionada y el resultado se pondra en un text (eso lo puedes cambiar tu por lo que quieras)

Código vb:
Ver original
  1. Dim suma As Long
  2. Dim i As Long
  3. For i = 0 To MSFlexGrid1.Rows - 1
  4. suma = suma + Val (MSFlexGrid1.TextMatrix (i, 5))
  5. Next
  6. Text3.Text = suma
  7. End If

Saludos
  #6 (permalink)  
Antiguo 21/04/2010, 08:47
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 11 años, 5 meses
Puntos: 53
Respuesta: Sumar filas en un MSFlexgrid

Una posible solución podrían ser estas dos funciones:

Código vb:
Ver original
  1. Public Function hhmmss(ByVal FechaInicio As Date, ByVal FechaFin As Date) As String
  2.   ' Recibe dos fechas y devuelve su diferencia en Horas, Minutos y Segundos en formato hhhhhh:mm:ss
  3.  ' una cadena de 12 dígitos para ser mas facil tomar lo deseado con Mid$
  4.  ' Hor = Mid$(1,6)   ' Min = Mid$(8,2)   ' Seg = Mid$(11,2)
  5.  Dim Calculos As Long, h As Long, m As Long, s As Long
  6.   If Not IsDate(FechaInicio) Or Not IsDate(FechaFin) Then GoTo Aviso
  7.   Calculos = DateDiff("s", FechaInicio, FechaFin)
  8.   s = Calculos Mod 60
  9.   Calculos = (Calculos - s) / 60
  10.   m = Calculos Mod 60
  11.   h = (Calculos - m) / 60
  12.   hhmmss = Right$(Str$(h + 1000000), 6) & ":" & Right$(Str$(m + 100), 2) & ":" & Right$(Str$(s + 100), 2)
  13.   Exit Function
  14. Aviso:
  15.   MsgBox "Se ha recibido un valor de fecha incorrecto"
  16. End Function

Código vb:
Ver original
  1. Public Function Sumahhmmss(ByVal Sumando1 As String, Sumando2 As String) As String
  2.   ' Suma dos valores obtenidos de hhmmss y los devuelve en uno solo
  3.  Dim h As Long, m As Long, s As Long
  4.   h = Val(Mid$(Sumando1, 1, 6)) + Val(Mid$(Sumando2, 1, 6))
  5.   m = Val(Mid$(Sumando1, 8, 2)) + Val(Mid$(Sumando2, 8, 2))
  6.   s = Val(Mid$(Sumando1, 11, 2)) + Val(Mid$(Sumando2, 11, 2))
  7.   If s > 59 Then s = s - 60: m = m + 1
  8.   If m > 59 Then m = m - 60: h = h + 1
  9.   Sumahhmmss = Right$(Str$(h + 1000000), 6) & ":" & Right$(Str$(m + 100), 2) & ":" & Right$(Str$(s + 100), 2)
  10. End Function

Para probarlo es suficiente con insertar un command1 y modificar este código
Código vb:
Ver original
  1. Private Sub Command1_Click()
  2.   ' Para probar toma la fecha actual y la misma con un añadido de horas que será las devueltas
  3.  MsgBox "Horas = " & hhmmss(Now, Now + CDate("12:59:15"))
  4.   ' Las Suma dos veces para probar
  5.  MsgBox "Sumas = " & Sumahhmmss(hhmmss(Now, Now + CDate("12:59:15")), hhmmss(Now, Now + CDate("12:59:15")))
  6. End Sub

Probad y si hay errores avisad o corregid.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #7 (permalink)  
Antiguo 21/04/2010, 09:07
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 11 años, 5 meses
Puntos: 53
Respuesta: Sumar filas en un MSFlexgrid

Cita:
Iniciado por XYON126 Ver Mensaje
Hola erbunson!

Como he leido por ahi se que eres un forofo o apasionado del MsFlexgrid y espero que con mis chorrraditas te surjan retos que supongo ya habras tenido 1001 pero siempre sale uno nuevo. Bueno comentas que habria que verificar primero si los datos son lsDate, ¿esta funcion es similar a IsNumeric, se usa igual? aunque voy a rascar info es otro de los comandos que desconozco.
Referente a lo de sumar tiempos entre dos dias es algo que ya habia tenido en cuenta, de ahi el porque en cada registro aparte de la hora de entrada y de salida entro dia, fecha, año y tiempo(tiempo transcurrido) que es aqui donde lo calculo, en la Grilla solo sumo el total de cada dia ejemplo .. Lunes 12:00, martes 8:33, viernes 15:43 y mi totalhoras_C deberia ser = 36:13.

De si se recupera o no del Grill ¿Es asi?

Un saludo

Y gracias por adelantao a los dos

Con la funcion que he dejado, debería de funcionarte simplemente teniendo en cuenta que las horas de cada día deberían ajustarse previamente al formato de Sumarhhmmss o cambiar un poco la funcion
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #8 (permalink)  
Antiguo 21/04/2010, 15:33
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 11 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 ...
  #9 (permalink)  
Antiguo 22/04/2010, 01:56
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Sumar filas en un MSFlexgrid

Muchas gracias erbunson!

Espero que por lo menos hayas disfrutado un poco despues de los dolores de cabeza que os meto. Ahora solo me falta primero digerir el codigo, comprenderlo, entenderlo y saber el porque de todo, pues no es poco.

Ya te dire como me va aunque tardare un poco hasta haberlo entendido.

Un saludo
  #10 (permalink)  
Antiguo 23/04/2010, 01:45
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Sumar filas en un MSFlexgrid

Hola erbunson!

He estado analizando tu ultimo codigo y como es normal tengo un monton de dudas y me pierdo, me explico pues hay comandos que la información que he obtenido es muy difusa por parte de VB, primero veo por un lado que en la
primera rutina .:


"Public Function HmsDif(ByVal FechaInicial As Date, FechaFinal As Date, Optional ConSegundos As Boolean = False) As String"

Hay esto ¿Que es no he encontrado información) .: ByVal FechaInicial As Date

Por otro lado las dos rutinas se llaman HmsDif y HmsSum y en ambas veo que se autollaman en dos ocasiones en su propia rutina ¿Porque si es asi? y finalmente la rutina que pones fuera del codigo :

Código vb:
Ver original
  1. Dim TotalHoras As String
  2. For Fila = 1 to Grid.Rows-1
  3. TotalHoras = Hms( TotalHoras, Grid.TextMatrix(Fila, 7)
  4. Next
  5. ' Asignas aquí la suma de Horas donde tu quieras.


Que es donde guardamos la suma en la variable TotalHoras haces referencia a otra rutina o variable que se llama Hms que no la veo por ninguna parte, podrias explicarme un poco el tema, es que me pierdo por completo que soy muy torpe y cazurro.

Un saludo
  #11 (permalink)  
Antiguo 23/04/2010, 03:02
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 11 años, 5 meses
Puntos: 53
Respuesta: Sumar filas en un MSFlexgrid

Por puntos:

Byval --> No te compliques la vida por este punto, esto significa que la Rutina o Funcion recibe el Valor de la variable y no la variable propiamente, y lo que ocurre en este caso es que aunque la rutina modificase por 'error' la variable, realmente la variable original no sufriría ningun cambio.

HmsDif y HmsSum --> Son dos Funciones, no dos Procedimientos y una función devuelve el valor por su propio nombre, por esto antes de salir de la misma debe asignarse a su nombre el valor obtenido porque de lo contrario devolveria Nulo, Cero, etc.

Hms --> Es la prueba evidente de que yo también soy humano y puedo equivocarme, mi intención era poner HmsSum ya que pretendía mostrar como se haría la suma.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #12 (permalink)  
Antiguo 23/04/2010, 04:05
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Sumar filas en un MSFlexgrid

Cita:
Iniciado por erbuson Ver Mensaje
Por puntos:

Hms --> Es la prueba evidente de que yo también soy humano y puedo equivocarme, mi intención era poner HmsSum ya que pretendía mostrar como se haría la suma.

Saludos
Hola erbunson!

Hasta ahora lo de ser humano me lo ponias en duda por los conocimientos(es broma) pero ya me gustaria no ser humano y saber solo la mitad de tus conocimientos.

Bueno, coñas aparte, ahora vamos pillando el tema voy haber si lo digiero un poco mas y ya te contare como me va.

Muchas gracias

Un saludo
  #13 (permalink)  
Antiguo 04/05/2010, 03:27
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Sumar filas en un MSFlexgrid

Hola erbuson!

He estado analizando los codigos y me ha surgido una duda, tu has generado dos funciones la HmsDif y la HmsSum hasta aqui OK!, pero tanto aqui como en el codigo que me enviastes veo que la funcion HmsDif se llama asi misma (ya lo habiamos comentado el porque) pero en ninguna parte mas, entonces ¿Como, donde realmente estamos convirtiendo o formateando las entradas? o dicho de otra manera ¿Donde realmente estas utilizando esta función? pues la otra HmsSum
la usamos pero ya recibe los datos formateados, y en el codigo enviado veo que suma pero no da error y en cambio los datos son diferentes inicio1 As Date e inicio1 As String este ultimo en la funcion HmsSum, si no llama en ningun momento a la HmsDif ¿Donde esta haciendo el cambio de formato?

Un saludo
  #14 (permalink)  
Antiguo 04/05/2010, 04:49
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 11 años, 5 meses
Puntos: 53
Respuesta: Sumar filas en un MSFlexgrid

Hola Xyon: En este caso, sólamente utilizo la de suma HmsSum porque la utilizo tan sólo para sumar los valores que proceden de tu fichero y que representan hh:mm:ss por lo tanto no he aplicado ninguna diferencia porque asumo que son correctos los guardados por ti.

Saludos.

Pd: He visto tu PDF pero me lo miro esta noche porque ando algo liado.
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #15 (permalink)  
Antiguo 04/05/2010, 09:04
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Sumar filas en un MSFlexgrid

Cita:
Iniciado por erbuson Ver Mensaje
Hola Xyon: En este caso, sólamente utilizo la de suma HmsSum porque la utilizo tan sólo para sumar los valores que proceden de tu fichero y que representan hh:mm:ss por lo tanto no he aplicado ninguna diferencia porque asumo que son correctos los guardados por ti.

Saludos.

Pd: He visto tu PDF pero me lo miro esta noche porque ando algo liado.
Hola!
OK!
¿Entonces en caso de usarla es identico el sistema de entrada de datos a la HmsSumar?

Un saludo
  #16 (permalink)  
Antiguo 04/05/2010, 09:20
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 11 años, 5 meses
Puntos: 53
Respuesta: Sumar filas en un MSFlexgrid

No acabo de entender con tu expresión lo que realmente quieres decir.
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #17 (permalink)  
Antiguo 05/05/2010, 05:21
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Sumar filas en un MSFlexgrid

Cita:
Iniciado por erbuson Ver Mensaje
No acabo de entender con tu expresión lo que realmente quieres decir.
Hola!

Si no me he explicado muy bien, en el supuesto de usarla,Si la forma de usarla es asi .:

según declaración esta es la función.:

HmsDif(ByVal FechaInicial As Date, FechaFinal As Date, Optional ConSegundos As Boolean = False) As String


y esta es la llamada según entiendo yo .:

HmsDif(0:25:33, 14:02:05, False) 'Si la quiero con este formato hh:mm y

HmsDif(0:25:33, 14:02:05, True) 'Si la quiero con este formato hh:mm:ss

naturalmente si tengo una variable en vez de 0:00:00 poner el nombre de la variable.

Un saludo
  #18 (permalink)  
Antiguo 05/05/2010, 07:59
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 11 años, 5 meses
Puntos: 53
Respuesta: Sumar filas en un MSFlexgrid

Correcto compañero, pero simplemente una aclaracion por si se te ocurre probarlo y te da un error, así ya lo evitamos:

Por ejemplo Label1 = HmsDif(0:25:33, 14:02:05, False)

las horas no pueden indicarse de esta manera, debes tenerlas en una variable de tipo Date o efectuar la conversión por ejemplo,

esto si funciona Label1 = HmsDif("0:25:33", "14:02:05", False)

porque VB hace la conversión implícita y esto también

Label1 = HmsDif(CDate("0:25:33"), CDate("14:02:05"), False)

porque en este segundo caso la conversión la haces tu

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #19 (permalink)  
Antiguo 05/05/2010, 23:51
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Sumar filas en un MSFlexgrid

OK!

Muchas gracias Erbuson.

Un saludo
  #20 (permalink)  
Antiguo 14/05/2010, 06:13
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Sumar filas en un MSFlexgrid

Hola erbuson!

He estado probando tu funcion y me da este error .:

Error '9' en tiempo de ejecución.
el subindice esta fuera del intervalo.

Las dos funciones donde la llamo y la tuya son estas .:

Código vb:
Ver original
  1. ' ---------------------------------------------------------------------------
  2. ' \\ -- Funición sumar totales diarios.
  3. ' ---------------------------------------------------------------------------
  4.  
  5. Private Sub SumarGrid()
  6.  
  7. Dim Columna As Single
  8. Dim Parcial As String
  9.  
  10. Parcial = "0:00:00"
  11.          
  12. For Columna = 0 To MSFlexGrid.Cols - 1
  13.      Parcial = HmsSum(Parcial, MSFlexGrid.TextMatrix(7, Columna))
  14. Next
  15.  
  16. 'Retornar el total de la suma a la función SumarGrid
  17. Totalhoras_C = Parcial
  18.  
  19. End Sub


Y la qtuya que esta en un modulo es esta .:

Código vb:
Ver original
  1. ' --------------------------------------------------------------------------
  2. ' \\ -- Subrutina para calcular las horas del archivo Horas.dat y del Grid.
  3. ' --------------------------------------------------------------------------
  4.  
  5. Public Function HmsSum(ByVal HmsUno As String, ByVal HmsDos As String) As String
  6.   ' Suma dos valores recibidos en formato hh:mm:ss
  7.  ' Si recibe formato hh:mm devuelve sólo hh:mm
  8.  Dim Uno() As String, Dos() As String
  9.   Dim Horas As Long, Minutos As Long, Segundos As Long, ConSegundos As Boolean
  10.   Dos = Split(HmsDos, ":")
  11.   If UBound(Dos) = 2 And HmsUno = "" Then HmsUno = "00:00:00"
  12.   If UBound(Dos) = 1 And HmsUno = "" Then HmsUno = "00:00"
  13.   Uno = Split(HmsUno, ":")
  14.   If UBound(Uno) = 2 And UBound(Dos) = 2 Then ConSegundos = True Else ConSegundos = False
  15.   Horas = Val(Uno(0)) + Val(Dos(0))
  16.   Minutos = Val(Uno(1)) + Val(Dos(1))
  17.   If ConSegundos Then Segundos = Val(Uno(2)) + Val(Dos(2))
  18.   If Segundos > 59 Then Minutos = Minutos + 1: Segundos = Segundos - 60
  19.   If Minutos > 59 Then Horas = Horas + 1: Minutos = Minutos - 60
  20.   If ConSegundos Then
  21.     HmsSum = Format(Horas, "#") & ":" & Format(Minutos, "00") & ":" & Format(Segundos, "00")
  22.   Else
  23.     HmsSum = Format(Horas, "#") & ":" & Format(Minutos, "00")
  24.   End If
  25. End Function

Cuando me sale el error me apunta a la linea 15 es esta:

Horas = Val(Uno(0)) + Val(Dos(0))

¿Porque del error si los datos son como comentastes, que he hecho mal?

Un saludo
  #21 (permalink)  
Antiguo 14/05/2010, 06:47
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 11 años, 5 meses
Puntos: 53
Respuesta: Sumar filas en un MSFlexgrid

Hola:

Haz la prueba de invertir los valores, y si es así después veo como arreglarlo ya que se trataría de un bug de la rutina y después te explico porqué:

En lugar de ponerlo así

Parcial = HmsSum(Parcial, MSFlexGrid.TextMatrix(7, Columna))

Lo pones asá

Parcial = HmsSum(MSFlexGrid.TextMatrix(7, Columna), Parcial )
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #22 (permalink)  
Antiguo 14/05/2010, 07:06
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Sumar filas en un MSFlexgrid

Hola erbuson!

Si! era eso. Cuando puedas comentame el porque ya que no le veo la logica.

Un saludo
  #23 (permalink)  
Antiguo 19/06/2010, 07:23
 
Fecha de Ingreso: junio-2010
Mensajes: 5
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Sumar filas en un MSFlexgrid

Código vb:
Ver original
  1. Dim suma As Long
  2. Dim i As Long
  3. For i = 0 To MSFlexGrid1.Rows - 1
  4. suma = suma + Val (MSFlexGrid1.TextMatrix (i, 5))
  5. Next
  6. Text3.Text = suma
  7. End If

Saludos[/QUOTE]

Amigo este es el codigo! pero recuerda que hay personas que estan empezando aprogramar, por consiguiente especifica bien:

Private Sub Sumar()

Dim i As Long
For i = 0 To MSFlexGrid1.Rows - 1
suma = suma + Val (MSFlexGrid1.TextMatrix (i, 5)) 'Donde 5 es el número de la columna a sumar
Next
Text3.Text = suma 'Donde text3 es el textbox donde va a mostrar el resultado

End Sub

luego en en "form" llamas la función "sumar"

Private Sub Form_Load()

Sumar

End Sub

Es todo.
  #24 (permalink)  
Antiguo 19/06/2010, 08:27
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 11 años, 5 meses
Puntos: 53
Respuesta: Sumar filas en un MSFlexgrid

Hola cyber_gab, antes de nada y ya que este es tu primer mensaje en el foro bienvenido a esta comunidad.

Espero que en tu estancia entre nosotros puedas aprender lo que ignoras y enseñar lo que sabes. Este es el deseo de todos los que aquí acuden.

Cuando dispongas de un momento te agradeceré expliques tu comentario:

Amigo este es el codigo! pero recuerda que hay personas que estan empezando aprogramar, por consiguiente especifica bien:


No acabo de entenderlo.

Un saludo
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #25 (permalink)  
Antiguo 22/06/2010, 09:36
 
Fecha de Ingreso: junio-2010
Mensajes: 5
Antigüedad: 10 años, 10 meses
Puntos: 0
De acuerdo Respuesta: Sumar filas en un MSFlexgrid

Claro amigo:

recuerden que no todos tenemos los mismos conocimientos, por consiguiente cuando den una explicación deben hacerla completa y especificada, por ejemplo:
si alguien pregunta:

¿como hago para colocarle * a un textBox para colocar claves?

la respuesta correcta deberia ser:

Colocate en el textBox, luego en las propiedades que se encuentra a la derecha de la pantalla busca la propiedad "Passwordchar" y coloca "*".

Pero hay personas que solo dicen, "cambiele el "passwordChar""

Ovbiamente si la persona pregunta algo que es tan elemental para algunos, se supone que para él no lo es, por eso siempre digo que cuando alguien da una respuesta espreferible especificarla bien para aclarar dudas.
Gracias
  #26 (permalink)  
Antiguo 22/06/2010, 10:29
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 11 años, 5 meses
Puntos: 53
Respuesta: Sumar filas en un MSFlexgrid

Ah, claro, ahora lo entiendo ...
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #27 (permalink)  
Antiguo 22/06/2010, 10:41
 
Fecha de Ingreso: junio-2010
Mensajes: 5
Antigüedad: 10 años, 10 meses
Puntos: 0
Busqueda Sumar filas en un MSFlexgrid

Amigo Erbuson:

como hago para abrir un tema?
si esto no es posible a donde me dirijo para que aclaren mis dudas sobre como conectar mi programa Visual Basic con base de datos Access en red?
Gracias
  #28 (permalink)  
Antiguo 22/06/2010, 10:49
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 11 años, 5 meses
Puntos: 53
Respuesta: Sumar filas en un MSFlexgrid

Muy simple lo del nuevo tema, accedes al menu inicial de VB donde estan todos los temas abiertos Foro Visual Basic Clasico y verás en la parte superior izquierda de la pantalla, por encima de los encabezados de las preguntas y mensajes un boton que poner NUEVO TEMA pinchas sobre el y después ya sabes, lo que se te ocurra, sin embargo procura respetar las reglas del foro, no pongas títulos ambíguos, no escribas en modo mensaje de teléfono móvil (se que no lo haces) ni escribas en mayúsculas ya que como bien sabrás escribir en mayúsculas en un foro significa o suele significar que estás gritando y esto nuna suele ser bien aceptado.

Respecto al tema de Conectar BBDD Access y VB cuando inicies el tema imagino que alguien mas experto que yo en este tema (no es necesario ser muy experto en BBDD para serlo mas que yo, puesto que lo mio son los ficheros directos y secuenciales) te podra ayudar al respecto.

Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #29 (permalink)  
Antiguo 22/06/2010, 11:30
 
Fecha de Ingreso: junio-2010
Mensajes: 5
Antigüedad: 10 años, 10 meses
Puntos: 0
Sumar filas en un MSFlexgrid

Gracias

Etiquetas: filas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 15:15.