【问题标题】:MS Project changing Assignment's work values when adding new ones via VBAMS Project 在通过 VBA 添加新时更改分配的工作值
【发布时间】:2012-01-16 17:26:15
【问题描述】:

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

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

【问题讨论】:

    标签: vba ms-project


    【解决方案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
    

    【讨论】:

    • 啊,我明白了!按照你的方法试了一下,偶然发现了一个小问题。添加新的 Assignment 时,tskTask.Assignments 的索引可能会发生变化,因此实际的 Assignment 与之前的索引位置不同。我没有进一步调查,但现在正在使用字典,它肯定将正确的资源映射到正确的工作量并设置它。很好的答案,帮助很大,谢谢瑞秋!
    • 我想知道资源的顺序...感谢您分享您的解决方案。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-17
      • 1970-01-01
      • 1970-01-01
      • 2017-11-21
      • 2013-01-06
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      相关资源
      最近更新 更多