3

使用 MS Project 2007 的 VBA 出现问题。我有一个Task包含 2 个作业的任务,包括资源Foo(2 天工作)和Bar(5 天工作)。Task设置为固定工作。现在,当手动向/从任务中添加或删除分配时,一切都按预期工作,没有什么特别的事情发生。使用 VBA 时,如下所示,其他作业的工作值会发生变化。

' 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

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

4

2 回答 2

1

因为任务设置为固定工时,所以当您添加资源分配时,它将保持任务的总工时相同。当您想要添加资源并增加任务的总工作量时,就会出现问题。

在这种情况下发生的情况是总工作时间为 56 小时。您添加一个作业,总工时仍为 56 小时。工作的比例相同:40%、100% 和 100%,分别为 9.33h、23.33h 和 23.33h。然后最后一次分配的工时增加到 80 小时,任务的总工时现在是 112.67 小时。

它在用户界面中按预期工作的原因是因为您不仅要添加新任务并设置其工作,而且从 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
于 2011-12-09T16:53:29.787 回答
0

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

于 2016-09-28T09:35:13.033 回答