调用VB类模块自定义Function报object variable未声明错误如何解决
你遇到的报错为:
object variable or with block is not declared
(中文含义:对象变量或With块未声明)
核心排查方向
你的代码语法本身没有错误,满足前置条件可正常运行,报错可按照以下顺序逐一排查:
- 检查
ArrayWartungsplan数组内的元素是否全部完成实例化:如果数组内存在未赋值的空对象(Nothing),遍历到空对象时调用类方法GetAllZyklen会直接触发该报错。请确认数组初始化阶段,每个元素都执行了Set Wartungsplan = New 你的类名称完成实例化。 - 检查ArrayList依赖是否正确引入:如果是VBA环境,ArrayList属于.NET类库的类型,需要提前在VBA编辑器的「工具-引用」中勾选
Microsoft Common Language Runtime Library才能使用。如果不想提前引用,可改为后期绑定写法:' 调用部分修改为后期绑定,无需提前引用 Dim AllZyklen1 As Object Set AllZyklen1 = CreateObject("System.Collections.ArrayList") ' 函数返回值修改为Object Public Function GetAllZyklen() As Object Dim AllZyklen2 As Object Set AllZyklen2 = CreateObject("System.Collections.ArrayList") ' 其余逻辑不变 If Not AllZyklen2.Contains(Zyklus) Then AllZyklen2.Add Zyklus End If Set GetAllZyklen = AllZyklen2 End Function - 检查类成员变量
Zyklus是否已赋值:如果Zyklus是引用类型且未完成初始化,调用AllZyklen2.Contains(Zyklus)时也会触发该报错。
逻辑优化提示
你当前循环内的代码每次都会用Set覆盖AllZyklen1的指向,最终只会保留数组最后一个Wartungsplan返回的ArrayList。如果你需要汇总所有Wartungsplan返回的周期数据,可修改为:
Dim AllZyklen1 As Object Set AllZyklen1 = CreateObject("System.Collections.ArrayList") For Each Wartungsplan In ArrayWartungsplan ' 合并当前对象返回的ArrayList,而非覆盖 AllZyklen1.AddRange Wartungsplan.GetAllZyklen Next Wartungsplan
内容的提问来源于stack exchange,提问作者G.M
相关产品推荐
相关产品推荐

