【问题标题】:How to pass an array to a function in VBA?如何将数组传递给VBA中的函数?
【发布时间】:2014-12-17 01:00:55
【问题描述】:

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

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

我收到一条错误消息:

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

我做错了什么?

【问题讨论】:

  • 有时 ByRef 关键字也有帮助:Function test(ByRef arr() As Variant)

标签: arrays function ms-access vba


【解决方案1】:

这似乎没有必要,但 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】:

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

    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")
    

    【讨论】:

    猜你喜欢
    • 2021-04-17
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 2022-11-16
    • 1970-01-01
    • 2020-08-19
    • 2016-04-09
    相关资源
    最近更新 更多