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

MS Project VBA:创建任务子集对象时添加任务报错求助

问题分析与解决方案

你遇到的"Object variable or With block variable not set"错误,核心原因是TaskCollection对象未初始化。直接赋值TaskCollection = ActiveProject.Tasks时,ActiveProject.Tasks是Project内置的已实例化集合,所以可以正常运行;但在enExportList分支中,你需要手动创建集合实例来存放筛选后的任务,否则直接调用Add方法会触发对象未设置错误。

修复步骤:

  • 在enExportList分支开始处,先实例化一个新的Collection对象(如果TaskCollection是自定义集合类型,对应实例化该类型)
  • 遍历TaskArray时,将有效Task对象添加到已初始化的集合中

示例修复代码:

Sub select_data_subset(config As type_ExportConfig)
    Dim TaskCollection As Collection ' 若为自定义集合类型则替换为对应类型
    Dim TaskArray() As String
    Dim counter As Integer
    Dim targetTask As Task
    
    Select Case config.ExportType
        Case enExportAll
            Set TaskCollection = ActiveProject.Tasks ' 直接引用内置集合
        Case enExportList
            ' 关键:初始化集合对象
            Set TaskCollection = New Collection
            ' 拆分TaskList为数组(假设你的拆分逻辑正确)
            TaskArray = Split(config.TaskList, ",")
            For counter = LBound(TaskArray) To UBound(TaskArray)
                Set targetTask = ActiveProject.Tasks(Val(TaskArray(counter)))
                ' 确认Task对象有效后再添加
                If Not targetTask Is Nothing Then
                    TaskCollection.Add targetTask
                End If
            Next counter
    End Select
    
    ' 后续处理TaskCollection的逻辑...
End Sub

关键说明:

  • 手动构建任务集合时,必须用Set TaskCollection = New Collection(或自定义集合的实例化语句)创建集合实例,否则TaskCollection处于Nothing状态,调用Add方法必然报错。
  • 保留If Not targetTask Is Nothing判断,可避免因TaskList中存在无效ID导致的潜在错误。

内容的提问来源于stack exchange,提问作者Stgauss

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 00:02:06