0

我有一个 excel 宏,它应该打开 MS Project 并对一些自定义字段进行更改,然后再次关闭它。Excel 和 Project 都是 2010 版本,项目存储在 MS Project Server 2010 上。

当我手动打开 MS Project 然后用 VBA 检测它时,一切正常。但是当我使用 VBA 打开一个新的 Project 实例时(因为我没有手动打开 MS Project),它会抛出一个错误:

在此处输入图像描述

这是代码的两个版本:

Sub open_project_with_error()

    Dim projapp As MSProject.Application, prj As Project
    Set projapp = New MSProject.Application
    projapp.FileOpenEx Name:="<>\Name of my project", ReadOnly:=False
    Set prj = Projects("Name of my project")
  ' Do more things...
End Sub

Sub open_project_without_error()

    ' Manually open MS Project application before running this VBA
    Dim projapp As MSProject.Application, prj As Project
    Set projapp = GetObject(, "MSProject.Application")
    projapp.FileOpenEx Name:="<>\Name of my project", ReadOnly:=False
    Set prj = Projects("Name of my project")
  ' Do more things...
End Sub

自然,我预计问题出在语句New MSProject.Application上。但是,正如预期的那样,这个 sub 完美地工作:

Sub open_project_and_display_about()

    Dim projapp As MSProject.Application, prj As Project
    Set projapp = New MSProject.Application
    Debug.Print projapp.About()

End Sub

这意味着错误仅由 和 的组合New MSProject.Application触发New MSProject.Application

有什么办法解决吗?

4

2 回答 2

0

我用它来自动从 Excel 打开 MSP 文件,检查应用程序是否已经打开

Function GetX(Str As String) As Object
    Dim app As Object
    On Error Resume Next

    Set app = GetObject(, Str)
    If Err.Number <> 0 Then
        Set app = CreateObject(Str)
        app.Visible = False
        app.Clear
    End If

    Set GetX = app
End Function

然后调用模块中的函数

Set ProjApp = GetX("MSProject.Application")
projapp.FileOpenEx Name:="<>\Name of my project", ReadOnly:=False
Set prj = Projects("Name of my project")
于 2018-08-09T13:52:33.337 回答
0

以下是一些尝试的建议:

  1. 设置projapp.Visible = True帮助调试问题。
  2. CreateObject 打开并返回对对象的引用,因此请使用它而不是手动打开 Project 然后使用GetObject,后者仅返回对已打开对象的引用。
  3. 限定对 MSProject 对象的引用,例如Dim prj as MSProject.ProjectSet prj = projapp.Projects(....

FWIW 我无法通过 project pro 2013 从项目服务器打开文件来复制此问题。

于 2018-07-17T15:22:40.760 回答