应用程序:有没有一种方法可以在没有提示的情况下保存和关闭外部文件?

时间:2018-08-03 13:16:19

标签: excel-vba

我编写了一个宏来打开资源池,提取资源数据并导入到excel工作簿中,然后打开包含实际员工列表的第二个工作簿,比较并混合这两个列表并将完整的更新列表注入MSP资源池。

一切正常,但是在过程结束时,我得到了令人讨厌的“ MSP另存为”提示窗口。

我尝试了所有ProjApp.DisplayAlerts = FalseProjApp.FileCloseExProjApp.FileCloseEx pjSaveProjApp.FileExitProjApp.FileExit pjSaveProjApp.ActiveProject.SavesAs ProjApp.ActiveProject.Name,但是我总是有这个提示窗口,想摆脱。有没有办法做到这一点,就像Excel Workbooks一样?

编辑: 看来问题出在FileOpenEx方法。我设置了ProjApp.FileOpenEx(file, False, , , , , , , , , , 2),但是当涉及到FileCloseEx时,我收到一条消息,指出该文件是只读文件,而不是应该的读/写

Dim ProjApp As MSProject.Application
Dim Proj As MSProject.Project

Set ProjApp = GetX("MSProject.Application")
ProjApp.Visible = True
ProjApp.DisplayAlerts = False

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

ProjApp.ViewApplyEx Name:="Resource Sheet", ApplyTo:=0

...

ProjApp.FileCloseEx
Set Proj = Nothing
Set ProjApp = Nothing

ProjApp.DisplayAlerts = True

1 个答案:

答案 0 :(得分:0)

打开资源库总体规划似乎可以解决问题。还必须将关闭方法从ProjApp.FileCloseEx更改为ProjApp.Quit pjSave

Dim ProjApp As MSProject.Application
Dim Proj As MSProject.Project

Set ProjApp = GetX("MSProject.Application")
ProjApp.Visible = True
ProjApp.DisplayAlerts = False

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

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

ProjApp.ViewApplyEx Name:="Resource Sheet", ApplyTo:=0

...

ProjApp.Quit pjSave
Set Proj = Nothing
Set ProjApp = Nothing

ProjApp.DisplayAlerts = True

现在,我更新了总体规划中的资源,并且它更新了资源池中的资源。

我想使用的另一个选项是ProjApp.ResourceSharingPoolUpdate,但是1 /当以读取/写入权限打开资源池时它不起作用,并且2 /表示只有打开时资源池才是只读的这样,并要求另存为副本。猜猜我还有一些工作要掌握这些奥秘:)