Loop не работает в функции UDF Excel VBA?

У меня возникла проблема с запуском кода ниже, код для вычисления разницы между двумя массивами дат, значения разделяются кареткой строк ( CHR(10) ), например, в ячейке A1 У меня следующие даты

 A1 12/12/2012 11/12/2021 7/8/2015 9/4/2014 B1 12/12/2012 11/12/2021 7/8/2015 9/4/2014 C1 2D 1D 4D 10D 

в D1 я вызываю функцию, из которой находится внутри модуля 1, следующим образом

 =calcSumDurations(A1,B1,C1) 

он всегда будет возвращать 0

и когда я пытаюсь проследить код, он будет вводить цикл for только один раз, даже если intmax = 3 или 4 или 40 в некоторых случаях, я пробовал пока, for, foreach, никто не работает.

  Function calcSumDurations(dateFrom, dateTo, dateDuration As String) Dim intmax, intSum, i, intError As Integer Dim varDateFrom, varDateTo, varDateDuration As Variant intSum = 0 intmax = -1 i = 0 intError = 0 varDateFrom = Split(dateFrom, Chr(10)) varDateTo = Split(dateTo, Chr(10)) varDateDuration = Split(dateDuration, Chr(10)) intmax = UBound(varDateFrom) If UBound(varDateFrom) = UBound(varDateTo) Then ' both are same lenght If intmax >= 0 Then ' more than one line For i = 0 To intmax 'While i < intmax MsgBox (i) If CInt(CDate(varDateTo(i))) >= CDate(varDateFrom(i)) Then 'check dates are more If testDate(CStr(varDateTo(i))) And testDate(CStr(varDateFrom(i))) Then intDuration = Abs(CInt(CDate(varDateTo(i)) - CDate(varDateFrom(i)))) + 1 intSum = intSum + intDuration 'strRes = strRes & CStr(intDuration) & Chr(10) Else intError = 1 'Exit For End If Else intError = 2 End If Next i End If Else intError = 3 End If calcSumDurations = intSum End Function 

Проблема заключается в этой строке кода:

 If CInt(CDate(varDateTo(i))) >= CDate(varDateFrom(i)) Then 

целое число слишком мало для хранения значения даты и вызывает исключение переполнения. Я не уверен, почему вы пытаетесь преобразовать его в целое число, так как сравнение не будет работать, если вы это сделаете.

Попробуй это:

 If CDate(varDateTo(i)) >= CDate(varDateFrom(i)) Then 

По крайней мере, он начнет проходить через цикл.

Я бы также определил, что вы хотите вернуть функции

 Function calcSumDurations(dateFrom As String, dateTo As String, dateDuration As String) As Long 
Interesting Posts
Давайте будем гением компьютера.