首页 > 解决方案 > 如何在 VBA 中的函数中返回和使用多个值

问题描述

我想编写一个用户定义的函数(UDF),A它返回多个值(比如说 3)。然后我想在另一个 UDF 中使用这些值,B.

我一直在关注 https://www.geeksengine.com/article/vba-function-multiple-values2.html 了解哪些 VBA 数据结构将支持这一点。我最初使用 acollection来存储来自 UDF 的多个值A,但在我的用例中,索引 0、1 和 2 有一些值,所以我想使用 aarray而不是 acollection以便我可以使用基数 0 进行索引(我不是确定这是否可行collections- 似乎第一个元素是.Item(1))。

问题是,我似乎无法在 UDF B 中检索 UDF A 返回的数组的值。

一个最小(非)工作示例:

Function A() As Variant

    Dim arr(3) As Variant

    arr(0) = "zero"
    arr(1) = "one"
    arr(2) = "two"

    A = arr

    MsgBox "Function A"
    MsgBox arr(0)

End Function


Function B() As Variant

    Dim arry(3) As Variant
    Set arry = A()

    MsgBox "Function B"
    MsgBox arry(0)


    End Function

Sub debugfunc()
    MsgBox B() 
End Sub

我都试过了Set arry = A()arry = A()。运行 debugfunc 子程序时,两者都会产生“不能分配给数组”错误。

有任何想法吗?

标签: excelvba

解决方案


您不使用Set并且需要相同类型的动态数组来接收函数结果:

Dim arry() As Variant
arry = A()

推荐阅读