VBA 调试打印参数数组错误 13 类型不匹配值



在Access VBA中,我正在尝试打印解析的参数数组的值,但不断收到运行时错误13 - 类型不匹配。数组中的值是混合类型,即双精度、字符串、长整型。

代码如下:

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

我尝试转换为字符串等,但它仍然不起作用。

有什么建议吗?

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

假设你有这个:

Public Sub DoSomething(ParamArray values() As Variant)

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

DoSomething 1, 2, "test"

如果你在DoSomething,你收到的values()是3个项目:数字1&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")

如果传入数组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

最新更新