gpt4 book ai didi

vba - MS Project 在通过 VBA 添加新时更改分配的工作值

转载 作者:行者123 更新时间:2023-11-30 23:56:02 26 4
gpt4 key购买 nike

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

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

最佳答案

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

在这种情况下发生的情况是总工作时间为 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

关于vba - MS Project 在通过 VBA 添加新时更改分配的工作值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8445170/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com