Ver Mensaje Individual
  #2 (permalink)  
Antiguo 03/11/2011, 13:33
Avatar de erbuson
erbuson
 
Fecha de Ingreso: noviembre-2009
Mensajes: 701
Antigüedad: 15 años, 1 mes
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 ...