在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