因此,我在Microsoft Excel中有一个时间表,其中包含各种信息。我创建了一个自己的自定义类型的数组,该数组读取了这些数据,但是现在我需要将数组输出到Project。
我的数组由以下自定义数据类型组成:
输入自定义类型
此名为TaskList()的数组将在其中容纳与任务数量一样多的子任务。该数组索引的TaskList中的所有子任务都属于相同的摘要名称,并且将采用以下格式:
键入taskList
鉴于我拥有所有必要的信息(名称/摘要名称/开始和结束日期)并且能够在VBA中自动循环并将其放入MS Project,现在该怎么办?
非常感谢,
Type TimelineInfo
taskName As String
dateStart As Date
dateEnd As Date
End Type
Type resourceSummary
beginningDate As Date
endingDate As Date
resourceName As String
numberOfTasks As Integer
taskList() As TimelineInfo
End Type
resourceSummary将是“摘要任务”,而taskList()中的所有任务都位于相应资源摘要名称的下面。
我已经声明了这两个变量
Dim timelineArray() As TimelineInfo
Dim groupsArray() As resourceSummary
groupsArray的索引从0到7,这意味着需要执行8个摘要任务,其中要包含尽可能多的子任务。数组已经充满了数据,现在我只需要输出到项目中即可。
z = 1
For i = LBound(groupsArray) To UBound(groupsArray)
For j = 0 To (groupsArray(i).number - 1)
tempName = groupsArray(i).taskList(j).taskName
pj.Tasks.Add Name:=tempName, before:=z
pj.Tasks(z).Start = groupsArray(i).taskList(j).date
pj.Tasks(z).Finish = groupsArray(i).taskList(j).dateEnd
z = z + 1
Next j
Next i
但是,我的问题是我仍然需要创建摘要任务以将所有这些子任务放入其中。摘要任务将来自resourceSummary自定义数据类型,并将使用
beginningDate As Date
endingDate As Date
resourceName As String
答案 0 :(得分:0)
我不确定您的问题是什么,但是我将根据此工作:
Proj.Find "UniqueID", "equals", pj.Tasks(z-7).ID
SelectRow pj.Tasks(z-7).ID, False, z
OutlineIndent
答案 1 :(得分:0)
如果使用Excel,则您的数据可能在工作表中。如果是这样,将其移动到自定义类型的数组会增加不必要的复杂性。就是说,如果您坚持使用类型,请知道您的摘要任务类型的三个元素是不相关的:BeginningDate和endDate是摘要任务的计算字段,并且您应该删除numberOfTasks,因为已经有了该信息作为taskList数组的大小
这是从自定义类型数组中将任务添加到新项目中的代码:
Sub AddTasks()
Dim i As Integer
Dim j As Integer
Dim z As Integer
For i = LBound(groupsArray) To UBound(groupsArray)
z = z + 1
pj.Tasks.Add groupsArray(i).resourceName
pj.Tasks(z).OutlineLevel = 1
For j = LBound(groupsArray(i).taskList) To UBound(groupsArray(i).taskList)
z = z + 1
pj.Tasks.Add groupsArray(i).taskList(j).taskName
pj.Tasks(z).Start = groupsArray(i).taskList(j).dateStart
pj.Tasks(z).Finish = groupsArray(i).taskList(j).dateEnd
pj.Tasks(z).OutlineLevel = 2
Next j
Next i
End Sub
这假定pj
被声明为MSProject.Project
,并且其中不包含任何任务。
这是我用来模拟示例数据的代码:
Dim groupsArray(4) As resourceSummary
Dim timelineArray(2) As TimelineInfo
Sub MockUpData()
Dim i As Integer
For i = 0 To 2
timelineArray(i).taskName = "Sub task " & i
timelineArray(i).dateStart = Date + i * 7
timelineArray(i).dateEnd = (Date + i * 7) + 4
Next i
For i = 0 To 4
groupsArray(i).resourceName = "Summary " & i
groupsArray(i).taskList = timelineArray
Next i
End Sub