You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 14:45:03