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 originalPublic Function stime(hour() As String) As String
Dim k As Integer 'Definirlo para evitar errores
'Si alguna cadena NO es valida la función da un error
For k = 0 To ubound(hour)
If Not IsNull(hour(k)) And Not IsDate(hour(k)) Then Exit Function
'stime = "" ' No es necesario porque stime no tiene valor asignado
'Exit Function
' Aqui te faltaba un End If si lo ponías en dos lineas, tal como te lo dejo no hace falta.
Next ' No es necesario indicar Next k
Dim sum As Date
' sum = 0 Efectivamente no es necesario
For k = 0 To ubound(hour)
sum = CDate(hour(k)) + sum
Next
'devuelve el resultado
stime = Format(sum, "HH:mm")
'Exit Function 'Ya estás en el final por lo tanto sale implicitamente
End Function
Cro que esta prueba funciona
Código vb:
Ver originalPublic Function stime(Hour() As Variant) As String
Dim k As Integer
For k = 0 To UBound(Hour)
If Not IsNull(Hour(k)) And Not IsDate(Hour(k)) Then Exit Function
Next
Dim sum As Date
For k = 0 To UBound(Hour)
sum = CDate(Hour(k)) + sum
Next
stime = Format(sum, "HH:mm")
End Function
Private Sub Command1_Click()
Dim Hour() As Variant
Hour = Array("10:00", "13:00", "00:30")
MsgBox stime(Hour())
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