2009-12-04 53 views
1

如何在MS Excel VBA中将数组作为参数传递给用户定义的函数?Excel:在用户定义的函数中传递数组?

最后,我想测试,如果某一特定日期(dateDay)在日期的几个范围(arrayVacation):

Function CB_IsInRangeArr(dateDay As Date, ParamArray arrayVacation() As Variant) As Boolean 

    ' Test that the array is in the form of 2 columns and n rows/if not send back an error 
    If (UBound(arrayVacation, 1) <> 2) Then 
     CB_IsInRangeArr = CVErr(xlErrNA) 
    Else 
     CB_IsInRangeArr = TRUE 
    End If 
End Function 

然而,已经在这个阶段,功能不能正常工作。它返回#VALUE!

回答

4

OK,我增加了一个功能

Public Function CB_IsInRangeArr(c As Date, range As range) As Boolean 
Dim iRow As Integer 

    For iRow = 1 To range.Rows.Count 
     Dim startDate As Date, endDate As Date 
     startDate = range.Cells(iRow, 1) 
     endDate = range.Cells(iRow, 2) 
     If (startDate <= c And endDate >= c) Then 
      CB_IsInRangeArr = True 
      Exit Function 
     End If 
    Next iRow 
End Function 

这允许您添加的日期范围,以及小区的日期去检查。

然后在细胞中的公式是

=CB_IsInRangeArr(C1,A1:B2) 

和c1是日期来检查,而a1:B2的日期范围。

请问我是否可以进一步协助。

2

的ParamArray创建变体的每个元素保持参数的数组: 尝试是这样的


Function CB_IsInRangeArr(dateDay As Date, ParamArray arrayVacation() As Variant) As Variant 

    Dim nParams As Long 
    Dim vRangeValues As Variant 
    Dim jParam As Long 
    Dim j As Long 

    nParams = UBound(arrayVacation) - LBound(arrayVacation) + 1 
    If nParams &le 0 Then Exit Function 
    On Error GoTo Fail 

    For jParam = LBound(arrayVacation) To UBound(arrayVacation) 

     vRangeValues = arrayVacation(jParam).Value 

     For j = LBound(vRangeValues) To UBound(vRangeValues) 
      If (vRangeValues(j, 1) &le dateDay And vRangeValues(j, 2) &ge dateDay) Then 
       CB_IsInRangeArr = True 
       Exit Function 
      End If 
     Next j 

    Next jParam 

    Exit Function 
Fail: 
    CB_IsInRangeArr = CVErr(xlErrNA) 
End Function 
相关问题