Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Excel VBA获取主计划中的MSP子项目statusdate_Vba_Excel_Ms Project - Fatal编程技术网

如何从Excel VBA获取主计划中的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

我正在构建一个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.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
属性的原因。它完成了我一直在寻找的东西,但速度和循环所有子项目一样慢。我想没有其他方法可以加快进程。同意——要从子项目中获取项目级信息,需要在内存中打开它们。