使用用户定义的函数通过 ParamArray 传递数组

Passing arrays through ParamArray with user-defined functions

VBA 的新手。我在使用以下用户定义函数代码时遇到两个问题。我不知道如何通过 ParamArray 传递数组。

1) bool() 的打印类型应该是 8203。但是 test() 的打印类型是 8204,所以它们为空或无效。 编辑:指出 8204 是由于 Variant 类型。

2) 我不确定我是否使用 "A(0)(1,1)" 正确地调用了嵌套数组中的元素。我无法通过 Test() 函数打印或调用 A() 的值。

在单元格公式中:

=Test(bool())

在VBA编辑中:

Function Test(ParamArray A() As Variant)
    Debug.Print VarType(A)
    Debug.Print A(0)(1,1)
    Test = A(0)(1, 1)
End Function

Function bool()
    Dim out() As Boolean
    Dim u As Integer, v As Integer

    ReDim out(1 To 3, 1 To 2)
    For v = 1 To 2
        For u = 1 To 3
            out(u, v) = True
        Next u
    Next v

    Debug.Print VarType(out)
    bool = out
End Function

ParamArray 是必需的,我只是不在这个例子中说明原因。

8204 is expected because ParamArray A() As Variant is a variant array.

vbVariant = 12
vbArray = 8192

8192 + 12 = 8204

你有两个问题,首先A(0)是参数1,内容是out(u,v),所以 debug.print A(0) 会出错,第二个你的函数测试没有 return 值 运行 的代码如下:

Function Test(ParamArray A() As Variant)
    msgbox "1" & ubound(A)
    Debug.Print A(0)(1, 1)
    Test = A(0)(1, 1)
    msgbox "2" & ubound(A)
End Function

Function bool()
    Dim out() As Boolean
    Dim u As Integer, v As Integer

    ReDim out(1 To 3, 1 To 2)
    For v = 1 To 2
        For u = 1 To 3
            out(u, v) = True
        Next u
    Next v

    Debug.Print VarType(out)
    bool = out
End Function

问题已通过删除 Debug.Print A(0) 得到解决。并通过修复原始 post.

中不存在的另一个错字