【问题标题】:Can't read MS Project 2013 tasks into Excel 2016 VBA无法将 MS Project 2013 任务读入 Excel 2016 VBA
【发布时间】:2016-08-16 12:42:03
【问题描述】:

我正在尝试编写一个 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。

任何帮助将不胜感激。

【问题讨论】:

  • 您已将 SubProject 声明为 Task 对象,而不是 SubProject 对象。此外,SubProject 是一个关键字;为您的变量名称选择一个非关键字。也就是说,尝试“对于 ProjectFile.SubProjects 中的每个子项目”。
  • 我将 SubProject 的声明从 Task 对象修复为 SubProject 对象,并根据您的建议将 SubProject 的变量名称更新为 SubProjectFile,但我仍然遇到相同的错误。还有其他想法吗?
  • 看看这个页面,好像是相关的:Removing Outdated References to Project...

标签: excel vba ms-project


【解决方案1】:

Subproject 已经成为一种类型已有一段时间了。它是子项目的成员。因此,您不能使用任务对象遍历 Subprojects 集合。

我预计会出现类型错误或对象设置为“无”的问题。再加上您收到的错误消息,我认为您的 VBA 环境可能引用了旧版本的 MS Project 库。在工具 > 参考下,您需要的是“Microsoft Project 15.0 对象库”。

另一件事。摘要项目中的任务是插入的项目摘要任务。除非子项目与其源断开链接(LinkedToSource = False),否则我一直无法通过尝试迭代摘要项目任务来迭代所有任务。根据您的操作,遍历文件夹的File System Object 可能同样有效,打开每个项目,提取数据,下一步...为此,您需要在参考中包含 Microsoft Scripting Runtime也是。

希望对您有所帮助。如果这回答了问题,请将其标记为这样。

【讨论】:

  • 根据您的建议,我将 SubProject 作为任务的声明更新为 SubProject,并且我可以确认我引用了“Microsoft Project 15.0 对象库”。但我仍然遇到同样的错误。还有其他建议吗?
猜你喜欢
  • 1970-01-01
  • 2021-07-23
  • 1970-01-01
  • 1970-01-01
  • 2016-10-01
  • 2022-11-18
  • 2015-01-06
  • 2013-06-04
  • 1970-01-01
相关资源
最近更新 更多