首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Microsoft项目中使用VBA来扩展自定义成本字段?

如何在Microsoft项目中使用VBA来扩展自定义成本字段?
EN

Stack Overflow用户
提问于 2022-10-26 12:39:54
回答 2查看 124关注 0票数 1

我试图对定制的成本字段“人工”和“材料”进行时间标度,以便查看这些数据是如何在给定的时间范围内分布的。

代码语言:javascript
运行
复制
Sub MSCostOutlay()

    'This macro will copy timescaled variance data into the Baseline9Cost field.
    
    Dim TSVBaselineCost As TimeScaleValue 'Capture the dataset for the Baseline10Cost
    Dim TSVSBaselineCost As TimeScaleValues
    Dim t As Task
    
'    ActiveProject.StatusDate = InputBox("Enter the Status Date.", "Status Date", ActiveProject.StatusDate)
    
  

    For Each t In ActiveProject.Tasks
                Set TSVSBaselineCost = t.TimeScaleData((ActiveProject.StatusDate), ActiveProject.StatusDate, pjTaskTimescaledBaseline9Cost, pjTimescaleMonths, 1)
                For Each TSVBaselineCost In TSVSBaselineCost
                    TSVBaselineCost = t.Cost4
                Next TSVBaselineCost
                t.Baseline9Cost = t.Baseline9Cost + 1
    Next t


End Sub

上面是我尝试使用的代码,用于将人工成本存储在时间缩放数组中。我试着用一天的数据测试这个脚本,以减少处理时间。无论如何,我一直得到一个1101的运行时错误,但没有成功。

EN

回答 2

Stack Overflow用户

发布于 2022-10-26 14:57:23

此代码将使用Cost5字段对每个任务跨度内的Baseline9Cost值进行时间划分,因为该字段可以是时间缩放的,而编号的成本字段(例如Cost5)则不能。

下面是代码:

代码语言:javascript
运行
复制
Sub MSCostOutlay()

    Dim tsv As TimeScaleValue
    Dim tsvs As TimeScaleValues
    Dim t As Task

    For Each t In ActiveProject.Tasks
        t.Baseline9Cost = t.Cost5
        Set tsvs = t.TimeScaleData((t.Start), t.Finish, pjTaskTimescaledBaseline9Cost, pjTimescaleDays, 1)
        For Each tsv In tsvs
            If Application.DateDifference(tsv.StartDate, tsv.EndDate) > 0 Then
                tsv = t.Baseline9Cost / (t.Duration / (60 * 8))
            End If
        Next tsv
    Next t

End Sub

备注:

  • 输入时间刻度数据时,使用天数而不是月份,跳过非工作日。
  • 记住,持续时间以分钟为单位,所以1天= 480分钟(60 * 8)

票数 0
EN

Stack Overflow用户

发布于 2022-10-27 02:24:25

我怀疑您得到了错误,因为代码没有正确地识别时标数据中的非工作日。作为参考,对于我在Windows 10上使用Project 2019,您的代码运行良好(正如所写的那样)。尝试下面的调整,看看它现在是否运行。

代码语言:javascript
运行
复制
    Dim tsv As TimeScaleValue
    Dim tsvs As TimeScaleValues
    Dim t As Task

    For Each t In ActiveProject.Tasks
        t.Baseline9Cost = t.Cost5
        t.Baseline9Duration = Application.DateDifference(t.Start, t.Finish)
        Set tsvs = t.TimeScaleData((t.Start), t.Finish, pjTaskTimescaledBaseline9Cost, pjTimescaleDays, 1)
        For Each tsv In tsvs
            If ActiveProject.Calendar.Period(tsv.StartDate, tsv.EndDate).Working Then
                tsv = t.Baseline9Cost / (t.Baseline9Duration / (60 * 8))
            End If
        Next tsv
    Next t

End Sub

约翰

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74207943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档