如何从Excel VBA获取主计划中的MSP子项目statusdate
我正在构建一个Excel仪表板,我希望它能够从我的部门MSP总体规划中获取数据 到目前为止,除了子项目的statusdate之外,我设法获得了我想要的所有数据如何从Excel VBA获取主计划中的MSP子项目statusdate,vba,excel,ms-project,Vba,Excel,Ms Project,我正在构建一个Excel仪表板,我希望它能够从我的部门MSP总体规划中获取数据 到目前为止,除了子项目的statusdate之外,我设法获得了我想要的所有数据 Sub ImportMSPData() Dim r As Range Dim MSP As MSProject.Application Dim proj As Project Dim subproj As Subproject Dim ligne As Long Set MSP = CreateObject("MSProject.Ap
Sub ImportMSPData()
Dim r As Range
Dim MSP As MSProject.Application
Dim proj As Project
Dim subproj As Subproject
Dim ligne As Long
Set MSP = CreateObject("MSProject.Application")
MSP.Visible = False
Application.ScreenUpdating = False
Application.EnableEvents = False
AppActivate MSP
If MSP.FileOpenEx(MasterplanPath, , , , , , , , , , , pjDoNotOpenPool) Then
Set proj = MSP.ActiveProject
Else
MsgBox "Fichier non trouvé : " & vbCrLf & Files.MspRoutine
Exit Sub
End If
ligne = 1
For Each subproj In proj.Subprojects
ThisWorkbook.Sheets("test").Cells(ligne, 1).Value = subproj.Path
ThisWorkbook.Sheets("test").Cells(ligne, 2).Value = Left(subproj.InsertedProjectSummary.Name, 15)
ThisWorkbook.Sheets("test").Cells(ligne, 3).Value = Mid(subproj.InsertedProjectSummary.Name, 19)
ThisWorkbook.Sheets("test").Cells(ligne, 5).Value = subproj.InsertedProjectSummary.Start
ThisWorkbook.Sheets("test").Cells(ligne, 6).Value = subproj.InsertedProjectSummary.Finish
ligne = ligne + 1
Next
End Sub
我可以通过循环所有Supbroject、打开它们、读取数据并在之后关闭来获取Statusdate,但这取决于子项目的数量。有没有办法在不打开子项目的情况下在上面的循环中获取此信息?要获取子项目的状态日期,请使用属性引用基础子项目属性:
ThisWorkbook.Sheets("test").Cells(ligne, 7).Value = subproj.SourceProject.StatusDate
子项目文件上次修改的日期是否足够,或者是否希望将日期输入电子表格中的单元格中?我确实希望从每个子项目中获取状态日期,以便将它们与其他数据一起复制到excel工作表中,这样我就可以利用这些日期制作一个图表,以生成有关计划更新百分比的KPI。文件修改的日期不相关,因为它可以被打开和修改,但不能更新是的,我当然可以这样做,但老实说,这样做所获得的时间将是最小的。在这个操作中,打开、阅读和关闭每个子项目是非常耗时的,这就是为什么我真的想摆脱它。我上面发布的实际宏几乎是在瞬间运行的,实际上我想从Excel VBA读取MSP数据。我对Python一无所知,但也许它会有所帮助,我不知道你发现从子项目(拉操作)读取数据很慢,也许你可以在保存之前利用每个子项目的
project\u
事件并将它们的状态数据推到某个地方?谢谢@Rachel,我确信您会得到答案:-)MSDN描述不够清晰,这就是为什么我没有尝试SourceProject
属性的原因。它完成了我一直在寻找的东西,但速度和循环所有子项目一样慢。我想没有其他方法可以加快进程。同意——要从子项目中获取项目级信息,需要在内存中打开它们。