VBA调试打印ParamArray错误13类型不匹配值

时间:2018-03-19 01:55:28

标签: vba ms-access

在Access VBA中,我试图打印已解析的参数数组的值,但仍然遇到运行时错误13 - 类型不匹配。数组中的值是混合类型,即Double,String,Long。

代码如下:

Function MyArray() as Variant

Dim MyParams(2) as Variant
MyParams(0) = "3459"
MyParams(1) = "3345"
MyParams(2) = "34.666"

MyArray = MyParams

End Function

Sub PrintArray(ParamArray Params() As Variant)

    Dim p_param as Variant

    For Each p_param in Params
        Debug.Print params < - Error occurs here
    Next p_param

End Sub

我尝试过转换为字符串等但它仍然无法正常工作。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

为了迭代ParamArray值,您需要了解您正在接收的参数。

说你有这个:

Public Sub DoSomething(ParamArray values() As Variant)

关于ParamArray的一个很酷的事情是,它允许调用代码执行此操作:

DoSomething 1, 2, "test"

如果您在DoSomethingvalues()中收到的内容有3项:数字1&amp; 2,以及包含单词test的字符串。

然而,在你的情况下发生的事情是,你正在做这样的事情:

DoSomething Array(1, 2, "test")

当您在DoSomething时,您在values()中收到的内容是1项:包含数字1和数字的数组2,以及包含单词test的字符串。

坏消息是你无法控制调用代码调用该函数的方式。

好消息是你可以灵活应对它:

Public Sub DoSomething(ParamArray values() As Variant)
    If ArrayLenth(values) = 1 Then
        If IsArray(values(0)) Then
            PrintArray values(0)
        End If
    Else
        PrintArray values
    End If
End Sub
Public Function ArrayLength(ByRef target As Variant) As Long
    Debug.Assert IsArray(target)
    ArrayLength = UBound(target) - LBound(target) + 1
End Function

现在,无论哪种方式都可行:

DoSomething 1, 2, "test"
DoSomething Array(1, 2, "test")

答案 1 :(得分:0)

如果传入的Params()数组的元素本身是数组,则将其视为数组,否则只需打印...

Private Sub PrintArray(ParamArray Params() As Variant)

    Dim p_param As Variant
    Dim i As Long

    For Each p_param In Params
        If IsArray(p_param) Then
            For i = LBound(p_param) To UBound(p_param)
                Debug.Print p_param(i)
            Next
        Else
            Debug.Print p_param
        End If
    Next p_param

End Sub