在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
我尝试过转换为字符串等但它仍然无法正常工作。
有什么建议吗?
答案 0 :(得分:1)
为了迭代ParamArray
值,您需要了解您正在接收的参数。
说你有这个:
Public Sub DoSomething(ParamArray values() As Variant)
关于ParamArray
的一个很酷的事情是,它允许调用代码执行此操作:
DoSomething 1, 2, "test"
如果您在DoSomething
,values()
中收到的内容有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