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

VBA - función que suma array de horas

Estas en el tema de VBA - función que suma array de horas en el foro de Visual Basic clásico en Foros del Web. Necesito una ayuda con la función, creo que está todo bien menos la declaración de la función La llamada de la función o la definición ...
  #1 (permalink)  
Antiguo 03/11/2011, 12:58
Avatar de jayjayjay_92  
Fecha de Ingreso: octubre-2008
Mensajes: 77
Antigüedad: 15 años, 6 meses
Puntos: 0
VBA - función que suma array de horas

Necesito una ayuda con la función, creo que está todo bien menos la declaración de la función

La llamada de la función o la definición de la misma está mal, el resto creo que funcion

Código vb:
Ver original
  1. 'aquí creo que está el error
  2. Public Function stime(hour()) As String
  3.  
  4. 'i = numero de horas  sumar
  5. Dim i As Integer
  6. i = UBound(hour)
  7.  
  8.  
  9.  
  10. 'Si alguna cadena NO es valida la función da un error
  11. For k = 0 To i
  12.    
  13.     If Not IsNull(hour(k)) And Not IsDate(hour(k)) Then
  14.     stime = ""
  15.     Exit Function
  16.  
  17. Next k
  18.  
  19. 'sum =rresultado de la suma
  20. Dim sum As Date
  21. 'esto no se si es necesario
  22. sum = 0
  23.  
  24. For k = 0 To i
  25. sum = hour(k) + sum
  26. Next k
  27.  
  28. 'devuelve el resultado
  29. stime = Format(sum, "HH:mm")
  30. Exit Function
  31.  
  32. End Function

Código vb:
Ver original
  1. msgbox( stime.stime({"10:00","13:00","00:30"}) )

PD: la función lee strings porque tiene que leer de varios textboxes.

Gracias de antemano.

Última edición por jayjayjay_92; 03/11/2011 a las 13:27
  #2 (permalink)  
Antiguo 03/11/2011, 13:33
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: VBA - función que suma array de horas

Hola, antes de nada, en la funcion hay algunos errores que debes verificar:
Personalmente le pasaría los datos como Cadena y los ajustaría dentro de la funcion:

Código vb:
Ver original
  1. Public Function stime(hour() As String) As String
  2.   Dim k As Integer     'Definirlo para evitar errores
  3.  'Si alguna cadena NO es valida la función da un error
  4.  For k = 0 To ubound(hour)
  5.     If Not IsNull(hour(k)) And Not IsDate(hour(k)) Then Exit Function
  6.     'stime = ""   ' No es necesario porque stime no tiene valor asignado
  7.    'Exit Function
  8.    ' Aqui te faltaba un End If si lo ponías en dos lineas, tal como te lo dejo no hace falta.
  9. Next     ' No es necesario indicar Next k
  10.  
  11. Dim sum As Date
  12. ' sum = 0 Efectivamente no es necesario
  13.  
  14. For k = 0 To ubound(hour)
  15.   sum = CDate(hour(k)) + sum
  16. Next
  17.  
  18. 'devuelve el resultado
  19. stime = Format(sum, "HH:mm")
  20. 'Exit Function 'Ya estás en el final por lo tanto sale implicitamente
  21.  
  22. End Function

Cro que esta prueba funciona

Código vb:
Ver original
  1. Public Function stime(Hour() As Variant) As String
  2.   Dim k As Integer
  3.   For k = 0 To UBound(Hour)
  4.     If Not IsNull(Hour(k)) And Not IsDate(Hour(k)) Then Exit Function
  5.   Next
  6.   Dim sum As Date
  7.   For k = 0 To UBound(Hour)
  8.     sum = CDate(Hour(k)) + sum
  9.   Next
  10.   stime = Format(sum, "HH:mm")
  11. End Function
  12.  
  13. Private Sub Command1_Click()
  14.   Dim Hour() As Variant
  15.   Hour = Array("10:00", "13:00", "00:30")
  16.   MsgBox stime(Hour())
  17. End Sub

Aunque arriba te indicaba definir como String, en las pruebas he tenido que hacerlo como Variant porque la funcion Array devuelve una matriz Variant.

Todo dependerá de como le pases realmente los valores.

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 04/11/2011, 09:15
Avatar de jayjayjay_92  
Fecha de Ingreso: octubre-2008
Mensajes: 77
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: VBA - función que suma array de horas

En primer lugar, muchas gracias (que además es la 2ª vez que me sacas las castañas del fuego con el maldito formulario). Como supongo que habrás imaginado no programo en VB (de hecho soy de sistemas), esto es un caso excepcional y la verdad es que sin tu ayuda no se que hubiera hecho :).

PD: todo lo que me has puesto funciona a la perfección.
  #4 (permalink)  
Antiguo 04/11/2011, 10:31
Avatar de erbuson  
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 14 años, 5 meses
Puntos: 53
Respuesta: VBA - función que suma array de horas

De nada, encantado de servir de ayuda de vez en cuando.
Saludos
__________________
Agradecer a quien te enseñó, es enseñar lo que de él aprendiste.
Recuerda: Decir gracias, poco cuesta y mucho vale ...
  #5 (permalink)  
Antiguo 07/11/2011, 02:49
Avatar de XYON126  
Fecha de Ingreso: abril-2006
Mensajes: 272
Antigüedad: 18 años
Puntos: 0
Respuesta: VBA - función que suma array de horas

Hola!

Es solo para saludar a Erbuson que tanto me ha ayudado, un saludote y perdonar si no estoy demasiado por aqui pero estoy liado con vba de Catia que fue la razón por la que me inicie en el vb 6.0.

Un saludote Erbuson.

Etiquetas: horas, suma, vba
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




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