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

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

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

1] bool()的打印类型应该是8203。但是test()的打印类型为8204,因此它们为null或无效。编辑:指出8204是由于Variant类型引起的。

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

在单元格公式中:

=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是必需的,在这个示例中我没有说明为什么。

excel vba parameters parameter-passing paramarray
2个回答
1
投票

8204expected,因为ParamArray A() As Variantvariant数组。

vbVariant = 12vbArray = 8192

8192 + 12 = 8204


0
投票

您有两个问题,首先是A(0)是参数1,内容是out(u,v),所以debug.print A(0)将给出错误,其次是功能测试,没有返回值和运行代码如下:

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