
我试图对定制的成本字段“人工”和“材料”进行时间标度,以便查看这些数据是如何在给定的时间范围内分布的。
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的运行时错误,但没有成功。
发布于 2022-10-26 14:57:23
此代码将使用Cost5字段对每个任务跨度内的Baseline9Cost值进行时间划分,因为该字段可以是时间缩放的,而编号的成本字段(例如Cost5)则不能。

下面是代码:
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备注:
。
发布于 2022-10-27 02:24:25
我怀疑您得到了错误,因为代码没有正确地识别时标数据中的非工作日。作为参考,对于我在Windows 10上使用Project 2019,您的代码运行良好(正如所写的那样)。尝试下面的调整,看看它现在是否运行。
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约翰
https://stackoverflow.com/questions/74207943
复制相似问题