使用MS Project 2007时VBA出现问题。我有一个包含2个作业的Task
任务,包括资源Foo
(工作2天)和Bar
(5天工作)。 Task
设置为已修复的作品。现在,当手动添加或从任务中删除任务时,所有工作都按预期工作,没有任何花哨的事情发生。使用VBA时,如下所示,其他Assignments的工作值会发生变化。
' Adding an Assignment with the "Baz" Resource and 10d of work
Sub AddAssignment()
Dim tskTask As Task
Dim rsResource As Resource
Dim asAssignment As Assignment
Set tskTask = ActiveProject.Tasks(1)
Set rsResource = ActiveProject.Resources("Baz")
Set asAssignment = tskTask.Assignments.Add(tskTask.ID, rsResource.ID)
asAssignment.Work = "10d"
End Sub
在执行脚本之前:
Task:
Foo 16h
Bar 40h
执行后执行脚本:
Task:
Foo 9,33h
Bar 23,33h
Baz 80h
那么,实际问题是,为了保持其他作业的工作价值,我必须做些什么呢?
答案 0 :(得分:1)
由于任务设置为“固定工作”,因此在添加资源分配时,它将使任务的总工作量保持不变。当您想要添加资源并增加任务的总工作量时,就会出现问题。
在这种情况下发生的事情是总工作量为56小时。你添加一个作业,总工作量仍然是56h。工作比例相同:40%,100%和100%,分别为9.33h,23.33h和23.33h。然后最后一次分配的工作增加到80h,任务的总工作量现在为112.67h。
它在用户界面中运行的原因是因为您不仅要添加新的赋值并设置其工作,而且从MS Project的角度来看,您还要(重新)设置现有的工作资源。
在VBA中执行此操作的解决方案是准确模拟UI中发生的事情 - 包括重置现有资源的工作:
Sub AddAssignment()
Dim tskTask As Task
Dim rsResource As Resource
Dim asAssignment As Assignment
Dim colAssn As Collection
Dim iIdx As Integer
Set tskTask = ActiveProject.Tasks(7)
Set rsResource = ActiveProject.Resources("Baz")
Set colAssn = New Collection
For Each asAssignment In tskTask.Assignments
colAssn.Add asAssignment.Work
Next asAssignment
Set asAssignment = tskTask.Assignments.Add(tskTask.ID, rsResource.ID)
colAssn.Add 10 * 8 * 60 ' work is stored as minutes
For iIdx = 1 To colAssn.Count
tskTask.Assignments(iIdx).Work = colAssn(iIdx)
Next iIdx
End Sub
答案 1 :(得分:0)
实际上,更简单的问题是努力驱动。将任务设置为固定单位和努力驱动关闭,原始代码工作正常。