自动将子任务从 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 中做到这一点?
下图显示了在 运行 脚本之后子任务在每个任务下的显示方式。任务 2
到 11
应准确显示这三个子任务。
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
所以我有一个 Excel 文件,其中每一行都是 Microsoft Project 中的一个新任务。 Excel 文件每周用新行刷新。我使用 Project 导入向导映射字段,因此当我将 Excel 文件合并到 Project 时,映射字段会更新,并且当 Excel 文件中有新行时会添加新任务。
但是,现在我需要在导入 Excel 文件后自动向 Project 中的每个主要任务添加三个子任务,而不替换文件中已有任务的子任务。换句话说,只要Project文件中有新任务,我就需要自动添加这三个子任务。 Project 中的每个任务都有相同的三个子任务。
有什么方法可以在 VBA 中做到这一点?
下图显示了在 运行 脚本之后子任务在每个任务下的显示方式。任务 2
到 11
应准确显示这三个子任务。
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