MS项目变更任务';通过VBA添加新值时,s工作值

MS项目变更任务';通过VBA添加新值时,s工作值,vba,ms-project,Vba,Ms Project,使用MS Project 2007时VBA出现问题。我有一个任务Task,有两个任务,包括资源Foo(2天工作)和Bar(5天工作)任务设置为固定工时。现在,当手动向任务添加或从任务中删除工作分配时,所有工作都按预期进行,没有发生任何意外。使用VBA时,如下图所示,其他工作分配的工时值会发生变化 ' Adding an Assignment with the "Baz" Resource and 10d of work Sub AddAssignment() Dim tskTask As

使用MS Project 2007时VBA出现问题。我有一个任务
Task
,有两个任务,包括资源
Foo
(2天工作)和
Bar
(5天工作)<代码>任务设置为固定工时。现在,当手动向任务添加或从任务中删除工作分配时,所有工作都按预期进行,没有发生任何意外。使用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
执行脚本后:

Task:
  Foo 16h
  Bar 40h
Task:
  Foo 9,33h
  Bar 23,33h
  Baz 80h

那么,实际的问题是,为了保持其他任务的工时值,我必须做什么不同的事情?

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

在这种情况下,总工时是56小时。添加作业后,总工时仍为56小时。功的比例相同:40%、100%和100%,分别为9.33小时、23.33小时和23.33小时。然后,上一次作业的工时增加到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

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

啊,我明白了!你试过了,但遇到了一个小问题。添加新作业时,
tskTask.Assignments
的索引可能会更改,因此实际作业的索引位置与以前不同。我没有进一步调查,但现在正在使用字典,它肯定会将正确的资源映射到正确的工作量,并设置它。回答得很好,帮助很大,谢谢瑞秋!我想知道资源的顺序。。。感谢分享您的解决方案。