[英]Loop Not Working in UDF Function 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.