我正在尝试编写Excel 2016 VBA宏,该宏将从Microsoft Project 2013摘要项目(包含我所有活动项目的项目)中读取数据,并将数据汇总到Excel中的摘要表中。
这是我到目前为止的代码:
Sub ExtractFromMsProject(ProjectPath As String)
Dim ProjectApp As MSProject.Application
Dim EachProject As MSProject.Project
Dim ProjectFile As MSProject.Project
Dim SubProjectFile As MSProject.SubProject
Dim SubProjectIndex As Long
On Error Resume Next
Set ProjectApp = GetObject(, "MSProject.Application")
If ProjectApp Is Nothing Then
Set ProjectApp = New MSProject.Application
End If
ProjectApp.DisplayAlerts = False
For Each EachProject In ProjectApp.Projects
If ProjectPath = EachProject.FullPath Then
Set ProjectFile = EachProject
Exit For
End If
Next
If ProjectFile Is Nothing Then
If ProjectApp.FileOpenEx(Name:=ProjectPath, ReadOnly:=True) Then
Set ProjectFile = ProjectApp.ActiveProject
Else
MsgBox "Unable to open the source project file '" & ProjectPath & "'."
Exit Sub
End If
End If
ProjectApp.Visible = True
For Each SubProjectFile In ProjectFile.Subprojects
Next
' For SubProjectIndex = 0 To ProjectFile.Subprojects.Count - 1
' Set SubProject = ProjectFile.Subprojects(SubProjectIndex)
' Next
ProjectApp.FileCloseEx pjDoNotSave
ProjectApp.Quit
End Sub
在我到达之前它很有效:
For SubProjectIndex = 0 To ProjectFile.Subprojects.Count - 1
在该行,我收到一条错误消息:
"自动化错误。图书馆未注册"
我试图进行一些Google搜索,但我找到的所有内容都是旧版本的Office / Project。
非常感谢任何帮助。
答案 0 :(得分:0)
Subproject已经有一段时间了。它是子项目的成员。因此,您无法使用任务对象迭代Subprojects集合。
我原本期望出现类型错误或对象被设置为"无"的问题。这与您收到的错误消息相结合,使我认为您可能拥有VBA环境引用的旧版MS Project库。在工具>下引用您需要的是" Microsoft Project 15.0对象库"。
另一件事。摘要项目中的任务是插入的项目摘要任务。我从来没有能够通过尝试迭代摘要项目任务来迭代所有任务,除非子项目与源的链接断开(LinkedToSource = False)。根据你正在做的事情,为文件夹迭代File System Object,打开每个项目,提取你的数据,接下来......可能同样有效...为此,你需要包含Microsoft Scripting Runtime in参考文献也是如此。
希望有所帮助。如果这回答了问题,请标记为这样。