如何在VBA中向函数传递一个数组?

49

我想编写一个接受数组作为参数的函数。该数组可以包含任意数量的元素。

Function processArr(Arr() As Variant) As String
    Dim N As Variant  
    dim finalStr as string      
    For N = LBound(Arr) To UBound(Arr)
        finalStr = finalStr & Arr(N)
    Next N
    processArr = finalStr
End Function

我是如何尝试调用函数的:

Sub test()
    Dim fString as string
    fString = processArr(Array("foo", "bar"))
End Sub

我遇到了一个错误:

编译错误:类型不匹配,需要数组或用户定义类型。

我做错了什么?


2
有时候 ByRef 关键字也会有帮助:Function test(ByRef arr() As Variant) - Christian
2个回答

50

这似乎是不必要的,但VBA是一个奇怪的地方。如果您声明了一个数组变量,然后使用Array()设置它,然后将该变量传递到您的函数中,那么VBA将会很高兴。

Sub test()
    Dim fString As String
    Dim arr() As Variant
    arr = Array("foo", "bar")
    fString = processArr(arr)
End Sub

您的函数processArr()也可以这样写:

Function processArr(arr() As Variant) As String
    processArr = Replace(Join(arr()), " ", "")
End Function

如果你喜欢简洁的风格。


2
The dude abides - 3therk1ll
1
好吧,我想我已经看到了一些和其他地方一样令人惊讶的东西,而且还是用英语。 - user1422348

33

在将函数声明更改为以下内容后,该函数对我起作用了...

Function processArr(Arr As Variant) As String

你也可以考虑像这样使用ParamArray...

Function processArr(ParamArray Arr() As Variant) As String
    'Dim N As Variant
    Dim N As Long
    Dim finalStr As String
    For N = LBound(Arr) To UBound(Arr)
        finalStr = finalStr & Arr(N)
    Next N
    processArr = finalStr
End Function

然后像这样调用函数...

processArr("foo", "bar")

1
ParamArray的参考资料为https://learn.microsoft.com/en-us/office/vba/language/concepts/getting-started/understanding-parameter-arrays。有趣的是VBA甚至不会突出显示ParamArray或更改大小写。 - cup

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接