通过VBA添加新项目时,MS Project更改Assignment的工作值

时间:2011-12-09 11:58:37

标签: vba ms-project

使用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

那么,实际问题是,为了保持其他作业的工作价值,我必须做些什么呢?

2 个答案:

答案 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)

实际上,更简单的问题是努力驱动。将任务设置为固定单位和努力驱动关闭,原始代码工作正常。