-1

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 是必要的,我只是没有用这个例子说明原因。

4

3 回答 3

1

8204预期的 ,因为ParamArray A() As Variant它是一个变体数组

vbVariant = 12
vbArray = 8192

8192 + 12 = 8204

于 2020-01-19T00:04:08.400 回答
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
于 2020-01-19T00:08:50.880 回答
-1

该问题已通过删除 Debug.Print A(0) 得到解决。并通过修复原始帖子中不存在的另一个错字。

于 2020-01-19T16:53:28.267 回答