【问题标题】:Assigning Task.Duration to an already added Task in VBA Microsoft Project将 Task.Duration 分配给 VBA Microsoft Project 中已添加的任务
【发布时间】:2020-07-01 07:28:30
【问题描述】:

我目前正在研究将产品需求导入 Microsoft Project 的 VBA 宏。

我使用以下代码添加/更新任务:

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

这是怎么回事?
请帮忙!

【问题讨论】:

    标签: vba ms-project


    【解决方案1】:

    自己找到的!

    问题是有时任务会被添加到旧任务中。所以它现在是一个包含几个子任务的父任务。根据定义,持续时间现在是所有子持续时间的总和。因此,父任务的持续时间不能手动更改,因为它会自动更新。

    所以一个简单的检查旧任务是否包含任何 OutlineChildren 然后跳过它解决了我的问题。

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

    谢谢

    【讨论】:

      猜你喜欢
      • 2021-06-06
      • 1970-01-01
      • 1970-01-01
      • 2021-10-13
      • 2023-03-28
      • 2019-11-21
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多