Access VBA打印ParamArray参数数组遇运行时错误13:类型不匹配求助
解决Access VBA中ParamArray打印的类型不匹配问题
我来帮你搞定这个运行时错误13的问题!咱们先拆解一下错误原因,再给出针对性的解决方案。
错误根源分析
你遇到的问题有两个关键点:
- 代码笔误:你在循环里写了
Debug.Print params,但params是整个ParamArray数组对象,而你要打印的是当前遍历的单个元素p_param,这本身就会导致类型不匹配。 - ParamArray的特性:当你调用
PrintArray MyArray()时,MyArray()返回的是一个完整的数组,此时ParamArray会把这个数组作为单个元素存入Params()中。你用For Each遍历Params时,拿到的p_param是一个数组,而Debug.Print无法直接输出数组对象,这就触发了类型不匹配错误。
解决方案
根据你的使用场景,这里提供两种可行的修正方案:
方案1:兼容“传入单个数组”和“传入多个参数”两种场景
修改PrintArray过程,增加数组判断逻辑,自动处理嵌套的数组元素:
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 Dim innerElem As Variant For Each p_param In Params ' 判断当前元素是否为数组 If IsArray(p_param) Then ' 嵌套遍历数组内部元素 For Each innerElem In p_param Debug.Print innerElem Next innerElem Else ' 非数组元素直接打印 Debug.Print p_param End If Next p_param End Sub ' 测试调用 Sub TestPrint() ' 场景1:传入MyArray返回的数组 PrintArray MyArray() ' 场景2:直接传入多个混合类型参数(ParamArray的原生用法) PrintArray "测试字符串", 12345, 67.89 End Sub
方案2:直接使用ParamArray的原生用法(传入多个参数)
如果你本来就想逐个传入参数,而不是传入一个数组,只需要修正笔误,并调整调用方式即可:
' 修正后的PrintArray(只改了Debug.Print的对象) Sub PrintArray(ParamArray Params() As Variant) Dim p_param As Variant For Each p_param In Params Debug.Print p_param ' 这里改成p_param,不是params Next p_param End Sub ' 调用方式(直接传多个参数) Sub TestDirectCall() PrintArray "3459", "3345", "34.666" End Sub
总结
- 如果你需要支持传入数组的场景,选择方案1;
- 如果你只是想用ParamArray接收多个零散参数,修正笔误后用方案2即可。
内容的提问来源于stack exchange,提问作者tamosa
相关产品推荐
相关产品推荐

