自动将子任务从 Excel 文件添加到 Microsoft Project

Automatically adding subtasks to Microsoft Project from Excel file

所以我有一个 Excel 文件,其中每一行都是 Microsoft Project 中的一个新任务。 Excel 文件每周用新行刷新。我使用 Project 导入向导映射字段,因此当我将 Excel 文件合并到 Project 时,映射字段会更新,并且当 Excel 文件中有新行时会添加新任务。

但是,现在我需要在导入 Excel 文件后自动向 Project 中的每个主要任务添加三个子任务,而不替换文件中已有任务的子任务。换句话说,只要Project文件中有新任务,我就需要自动添加这三个子任务。 Project 中的每个任务都有相同的三个子任务。

有什么方法可以在 VBA 中做到这一点?

下图显示了在 运行 脚本之后子任务在每个任务下的显示方式。任务 211 应准确显示这三个子任务。

http://imgur.com/a/o8THMIn

Sub ModifyName()

    Dim tsk As Task
    
    For Each tsk In ActiveProject.Tasks
        If Not tsk Is Nothing Then
            tsk.Name = tsk.Text2 + "-" + tsk.Name
        End If
        
    Next tsk
    
End Sub

Sub InsertSubTask()

    For Each tsk In ActiveProject.Tasks
        If tsk.Flag1 And tsk.OutlineChildren.Count = 0 Then
            With ActiveProject
                .Tasks.Add tsk.Name + " " + "name1", tsk.ID + 1
                .Tasks.Add tsk.Name + " " + "name2", tsk.ID + 2
                .Tasks.Add tsk.Name + " " + "name3", tsk.ID + 3
                
                .Tasks(tsk.ID + 1).OutlineIndent
                .Tasks(tsk.ID + 2).OutlineIndent
                .Tasks(tsk.ID + 3).OutlineIndent
                
                .Tasks(tsk.ID + 1).Start = tsk.Date1
                .Tasks(tsk.ID + 2).Start = tsk.Date2
                .Tasks(tsk.ID + 3).Start = tsk.Date3
                
                .Tasks(tsk.ID + 1).Number1 = tsk.Number1
                .Tasks(tsk.ID + 2).Number1 = tsk.Number1
                .Tasks(tsk.ID + 3).Number1 = tsk.Number1
                
                
            End With
        End If
    Next tsk
    

    
End Sub

这是一个基本的宏,可以将子任务添加到特定任务(如果它们还没有子任务)。对于此示例,Flag1 字段用于标识应具有子任务的任务。可以轻松更改该逻辑以查看任务名称、文本字段等。

更新:最后一个代码块根据标记任务的编号日期字段中保存的日期设置每个新任务的开始日期。 (请注意,设置开始日期会设置约束类型 =“开始时间不早于”,约束日期等于设置为开始日期的日期。)

Sub InsertSubTasks()

    Dim tsk As Task
    For Each tsk In ActiveProject.Tasks
        If tsk.Flag1 And tsk.OutlineChildren.Count = 0 Then
            With ActiveProject
                .Tasks.Add "Subtask 1", tsk.ID + 1
                .Tasks.Add "Subtask 2", tsk.ID + 2
                .Tasks.Add "Subtask 3", tsk.ID + 3
                
                .Tasks(tsk.ID + 1).OutlineIndent
                .Tasks(tsk.ID + 2).OutlineIndent
                .Tasks(tsk.ID + 3).OutlineIndent

                .Tasks(tsk.ID + 1).Start = tsk.Date1
                .Tasks(tsk.ID + 2).Start = tsk.Date2
                .Tasks(tsk.ID + 3).Start = tsk.Date3

            End With
        End If
    Next tsk
    
End Sub