我正在尝试构建一个仅在VBA编辑器中使用的函数,该函数接收一个二维数组并根据传递的列号和条件对其进行过滤,例如Excel的SUMIFS函数。我的方法是编写另一个仅根据一个列和一个条件进行过滤的函数,然后构建一个采用ParamArray的较大函数,然后遍历每个列/条件对并调用较小的函数进行过滤。问题是当我将ParamArray传递到更大的函数时,它始终显示“ ByRef参数类型不匹配”。
更大的函数接受以下参数:(数据数组,column1,criteria1,columnnum2,criteria2等)
这是较小的函数,仅使用一个条件进行过滤。
Function HFILTER(arr As Variant, column As Long, name As Variant)
Dim res_arr() As Variant
Dim i As Long, j As Long
Dim coll As Collection
Set coll = New Collection
For i = 1 To UBound(arr, 1)
If arr(i, column) = name Then
coll.Add i
End If
Next i
ReDim res_arr(1 To coll.count, 1 To UBound(arr, 2))
For i = 1 To coll.count
For j = 1 To UBound(arr, 2)
res_arr(i, j) = arr(coll(i), j)
Next j
Next i
HFILTER = res_arr
End Function
更大的函数接受以下参数:(数据数组,column1,criteria1,columnnum2,criteria2等)
Function HFILTERS(arr As Variant, ParamArray args()) As Variant
Dim i As Long, res_arr() As Variant
res_arr = arr
For i = 0 To UBound(args, 1) - 1 Step 2
res_arr = HFILTER(res_arr, args(i), args(i + 1))
Next i
HFILTERS = res_arr
End Function
但是,当我尝试将参数传递给更大的函数时,出现错误ByRef参数类型不匹配。
数据:
Sub Test()
Dim data() As Variant
data = Range("A2", "B16").Value
data = HFILTERS(data, 1, "A", 2, False)
End Sub
任何输入都将不胜感激。我想我缺少了一些非常简单的东西,但无法分辨出它是什么。
答案 0 :(得分:0)
没关系,我想通了。由于ParamArray必须处于Variant模式,因此任何使用传递参数的参数也必须声明为Variant模式。在我的HFILTER函数(上面较小的一个函数)中,colunm定义为Long,将其更改为Variant,现在一切正常。