VBA 将 excel 前身数据导出到 MS Project

阿兹曼

目前我的 excel 中有 4 列,即(ID 列可以忽略)

ID 任务名称 资源名称 前辈
1 任务1 员工1 2
2 子任务1 员工2
3 任务2 员工1 4,5
4 子任务2 员工2
5 子任务3 员工2

我希望在我的 Excel 中创建一个宏按钮,以将内容直接导出到 MS Project 中。我只能在网络上找到有关仅传输任务的共享。有人可以帮助我吗?真的很感激。

我现有的代码(归功于#madschedules),其中仅包含任务。

Sub createNewMSPFromExcelData()

' First go turn on the MS Project reference library

' Declare variables
Dim pjApp As MSProject.Application
Dim pjProject As MSProject.Project
Dim pjtasklist As MSProject.Tasks
Dim pjtask As MSProject.Task
'Dim pjpredlist As MSProject.TaskDependencies
'Dim pjpredlist As TaskDependencies
Dim pjpred As TaskDependency
Dim xlrange As Range
Dim xlrow As Long
Dim counter As Integer

'open MS Project application
Set pjApp = New MSProject.Application
pjApp.Visible = True

' Add a new project file
Set pjProject = pjApp.Projects.Add
Set pjtasklist = pjProject.Tasks


'Loop through all the Excel Data in the worksheet
counter = 2
Do Until Cells(counter, 1) = ""
    Debug.Print Cells(counter, 1).Value & "   " & Cells(counter, 2).Value & "   " & Cells(counter, 3).Value

    ' Add new task into MS Project from Excel Value
    pjtasklist.Add (Cells(counter, 2).Value)
    pjpred.Add (Cells(counter, 3).Value)

    counter = counter + 1
Loop

MsgBox ("There are " & pjtasklist.Count & vbNewLine & _
       " tasks in our new project")

End Sub

MS Project 图像中的预期数据

为了回答前辈,我目前正在做一个涉及多层次的电子原理图设计项目。因此,要在层次结构上工作,我需要确保在进行下一个层次之前完成子层次结构的活动,因此我将前辈的详细信息从原理图导出到 Excel 中。

雷切尔·赫廷格

添加任务然后设置任务属性的关键是在添加任务对象后获取对它的引用。所以而不是:

pjtasklist.Add (Cells(counter, 2).Value)

Set pjtask = pjtasklist.Add (Cells(counter, 2).Value)
pjtask.ResourceNames = Cells(counter, 3).Value

然而,在进一步讨论之前,需要明确任务、子任务和前任。在调度中,子任务被认为是摘要任务下的任务摘要任务用于对项目任务的相关子集进行分组。摘要任务的开始和结束日期是根据其子任务的最早开始和最晚结束计算的。

前身是必须在另一个任务开始之前发生的任务。以前的任务几乎总是应该首先输入,以便时间表按时间顺序读取。因此,很少会看到一个任务的前任 ID 值高于它自己的值。相反,如果 OL = OutlineLevel,Excel 表会更好:

ID 任务名称 资源名称 前辈 OL
1 任务1 员工1 1
2 子任务1 员工2 2
3 任务2 员工1 1
4 子任务2 员工2 2
5 子任务3 员工2 4 2

这产生了典型的调度结构,如下所示:

样品时间表

最后,这里是将上面的表格变成时间表的代码:

Sub createNewMSPFromExcelData()

Dim pjApp As MSProject.Application
Dim pjProject As MSProject.Project
Dim pjtasklist As MSProject.Tasks
Dim pjtask As MSProject.Task
Dim counter As Integer

Set pjApp = New MSProject.Application
pjApp.Visible = True

Set pjProject = pjApp.Projects.Add
Set pjtasklist = pjProject.Tasks

counter = 2
Do Until Cells(counter, 1) = ""

    Set pjtask = pjtasklist.Add(Cells(counter, 2).Value)
    pjtask.ResourceNames = Cells(counter, 3).Value
    pjtask.Predecessors = Cells(counter, 4).Value
    pjtask.OutlineLevel = Cells(counter, 5).Value

    counter = counter + 1
Loop

MsgBox ("There are " & pjtasklist.Count & vbNewLine & _
       " tasks in our new project")

End Sub

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章