Назначение Task.Duration уже добавленной Задаче в VBA Microsoft Project - PullRequest
0 голосов
/ 30 сентября 2010

В настоящее время я работаю над макросом VBA, импортирующим требования к продукту в Microsoft Project.

Я использую следующий код для добавления / обновления задачи:

Function AddTask(strText As String, lngDuration As Long, taskParent As Task)
    Dim oldTask As Task
    Set oldTask = taskParent.OutlineChildren(strText)
    If oldTask Is Nothing Then
        Dim newTask As Task
        Set newTask = taskParent.OutlineChildren.Add(Name:=strText, Before:=LastIndexOf(taskParent) + 1)
        newTask.OutlineLevel = taskParent.OutlineLevel + 1
        newTask.Duration = lngDuration
        Set AddTask = newTask
    Else
        oldTask.Duration = lngDuration
        Set AddTask = oldTask
    End If
End Function

Это отлично работает для новой задачи, но, к сожалению, я получаю странную ошибку при попытке обновить свойство Duration встарое задание.

Run-Time Error '1101'

Argument value is not valid

Я действительно не понимаю, в чем разница между

newTask.Duration = lngDuration

и

oldTask.Duration = lngDuration

Что здесь происходит?
Пожалуйста, помогите!

1 Ответ

0 голосов
/ 05 октября 2010

Сам нашел!

Проблема заключалась в том, что иногда задачи добавлялись к старой задаче.Так что теперь это родительская задача, содержащая пару дочерних задач.По определению длительность теперь является суммой всех дочерних длительностей.Таким образом, продолжительность родительской задачи не может быть изменена вручную, поскольку она обновляется автоматически.

Поэтому простая проверка, содержит ли старая задача какие-либо OutlineChildren, а затем ее пропуск, решает мою проблему.

If oldTask.OutlineChildren.Count = 0 Then
    oldTask.Duration = lngDuration
End If

Спасибо

...