VBA中如何将ArrayList作为函数参数?解决类型未定义错误
解决VBA中ArrayList/Dictionary作为函数参数的类型定义错误
出现User-defined type not defined错误的核心原因:你在函数参数里指定了ArrayList和Dictionary的具体类型,但调用时用的是后期绑定创建对象,且未提前引用对应类型库,导致VBA无法识别这些类型。
有两种解决方式,按需选择:
方式一:前期绑定(带智能提示,需引用库)
- 打开VBE编辑器,点击顶部菜单「工具」→「引用」
- 分别勾选以下两个库:
- 对应
ArrayList:找到「mscorlib.dll」(或标注为.NET Framework System.Collections的选项) - 对应
Dictionary:找到「Microsoft Scripting Runtime」
- 对应
- 确认后,函数参数可以保留原定义,调用时也能直接声明具体类型:
' 函数定义 Function ThisFunction(parameter1 As ArrayList, parameter2 As Dictionary) ' 函数逻辑代码 End Function ' 调用代码 Dim parameter1 As ArrayList Set parameter1 = New ArrayList Dim parameter2 As Dictionary Set parameter2 = New Dictionary
方式二:后期绑定(无需引用,兼容性强)
直接把函数参数的类型改为Object,和调用时的对象声明保持一致,不需要额外引用库:
' 函数定义 Function ThisFunction(parameter1 As Object, parameter2 As Object) ' 函数逻辑代码 End Function ' 调用代码(保持你原来的写法即可) Dim parameter1 As Object Set parameter1 = CreateObject("System.Collections.ArrayList") Dim parameter2 As Object Set parameter2 = CreateObject("Scripting.Dictionary")
两种方式对比
- 前期绑定:有代码智能提示,编写更高效,但依赖目标机器上的对应库,兼容性稍弱
- 后期绑定:不需要引用任何库,在不同机器上运行更稳定,但编写时没有智能提示
内容的提问来源于stack exchange,提问作者Nocxy
相关产品推荐
相关产品推荐

