簡體   English   中英

循環在UDF函數中不起作用Excel VBA?

[英]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 ,或者在某些情況下甚至是440 ,我都嘗試了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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM