如何在VBA中将数组传递给函数?

问题描述 投票:0回答:2

我正在尝试编写一个接受数组作为参数的函数。该数组可以有任意数量的元素。

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

我收到一条错误消息:

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

我做错了什么?

arrays function ms-access vba
2个回答
53
投票

这似乎没有必要,因为

Array()
函数文档明确指出该函数返回
Variant
类型,但 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

如果您喜欢简洁。


34
投票

你的函数在将其声明更改为此后对我有用......

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")
© www.soinside.com 2019 - 2024. All rights reserved.