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

如何在Microsoft Project中用VBA对自定义成本字段做时间刻度化?

解决MS Project VBA时间刻度数据写入的运行时错误1101

运行时错误1101通常和TimeScaleData参数不合法、任务对象无效有关,结合你的代码,问题集中在这几个点:

  • 遍历所有任务时未过滤空任务或摘要任务,这类任务无法正常获取/修改时间刻度数据
  • 直接对TimeScaleValue对象赋值,正确方式应修改其Value属性
  • 使用pjTimescaleMonths但仅指定单日日期范围,导致无法返回有效时间刻度条目

以下是修正后的代码,适配你将自定义成本字段(示例中用Cost4对应labor)写入Baseline9Cost时间刻度数据的需求:

Sub MSCostOutlay()
    ' 将自定义成本字段(Cost4)写入Baseline9Cost的时间刻度数据
    Dim tsv As TimeScaleValue
    Dim tsvs As TimeScaleValues
    Dim t As Task
    Dim targetDate As Date
    
    ' 测试用的目标日期,可替换为StatusDate或自定义日期
    targetDate = ActiveProject.StatusDate
    
    For Each t In ActiveProject.Tasks
        ' 跳过空任务和摘要任务
        If Not t Is Nothing And Not t.Summary Then
            ' 使用日刻度匹配单日测试范围,确保返回有效条目
            Set tsvs = t.TimeScaleData( _
                StartDate:=targetDate, _
                EndDate:=targetDate, _
                Type:=pjTaskTimescaledBaseline9Cost, _
                TimeScaleUnit:=pjTimescaleDays, _
                Count:=1 _
            )
            
            ' 写入自定义成本值到时间刻度条目
            For Each tsv In tsvs
                tsv.Value = t.Cost4
            Next tsv
        End If
    Next t
End Sub

关键修正说明:

  • 增加任务过滤:跳过空任务和摘要任务,避免无效对象操作
  • 时间刻度单位改为pjTimescaleDays,匹配单日测试的日期范围,确保返回有效时间刻度条目
  • 正确修改TimeScaleValue的Value属性,而非直接对对象赋值

如果需要扩展处理material字段(比如对应Cost5),只需复制写入逻辑并替换Cost4为Cost5;若要使用月刻度,需确保日期范围覆盖完整月份。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:25:22