3

MS Project 2007を使用してVBAで問題が発生しました。TaskリソースFoo(2日間の作業)とBar(5日間の作業)を含む2つの割り当てを持つタスクがあります。固定作業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 に答える