外部应用程序:从Excel循环打开窗口

问题描述 投票:0回答:2

我通过Excel打开主计划和资源池,但MSP随机创建包含其他两个文件的Project1。

我希望Excel检查它是否存在并关闭它而不保存

Dim ProjApps As new Collection
Dim ProjApp As MSProject.Application
Dim Proj As MSProject.Project

Application.ScreenUpdating = False

Set ProjApp = GetX("MSProject.Application")

ProjApp.Application.AppMaximize
AppActivate ProjApp
SendKeys "{RIGHT}", True
SendKeys "{ENTER}", True

If ProjApp.FileOpenEx(files.MSPRessPool, False, , , , , , , , , , 3) Then
    Set Proj = ProjApp.ActiveProject
    ProjApps.Add Proj
Else
    MsgBox "Fichier non trouvé : " & vbCrLf & files.MSPRessPool
    Exit Sub
End If

If ProjApp.FileOpenEx(files.MasterPlanning, False, , , , , , , , , , 3) Then
    Set Proj = ProjApp.ActiveProject
    ProjApps.Add Proj
Else
    MsgBox "Fichier non trouvé : " & vbCrLf & files.MSPRessPool
    Exit Sub
End If

For each Proj in ProjApps
    Debug.Print Proj.Name
    If Proj.Name = "Project1" then
        Proj.Application.FileCloseEx pjDoNotSave
    End If
Next

Project1文件未出现在ProjApps集合中,因此我无法关闭它

如何检查打开的MSP文件?

excel-vba ms-project
2个回答
0
投票

MS Project对象模型有一个Projects object,它是一个打开项目的集合,因此您不需要创建自己的项目。

For Each Proj In ProjApp.Projects
    Debug.Print Proj.Name
    If Proj.Name = "Project1" Then
        Proj.Application.FileCloseEx pjDoNotSave
    End If
Next

0
投票

根据Rachel Hettinger的回答,这段代码运行良好:

    For Each Proj In ProjApp.Projects
       Proj.Activate
       If Proj.Name = "Project1" Then
         Proj.Application.FileCloseEx pjDoNotSave
         Exit For
       End If
    Next

这个也有效

    For ProjNum = 1 To Projects.Count
       Projects(ProjNum).Activate
       If Projects(ProjNum).Name = "Project1" Then
          Proj.Application.FileCloseEx pjDoNotSave
          Exit For
       End If
    Next ProjNum
© www.soinside.com 2019 - 2024. All rights reserved.