方法';fileopenex';对象的'_MSProject';从VBA自动化MS Project时失败
我有一个excel宏,它应该打开MS Project,对一些自定义字段进行更改,然后再次关闭它。Excel和Project都是2010版,项目存储在MS Project Server 2010上 当我手动打开MS Project,然后用VBA检测它时,一切正常。但当我使用VBA打开Project的新实例时(因为我没有手动打开MS Project),它会抛出一个错误: 以下是代码的两个版本:方法';fileopenex';对象的'_MSProject';从VBA自动化MS Project时失败,vba,ms-project,ms-project-server-2010,Vba,Ms Project,Ms Project Server 2010,我有一个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 MS
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
和New MSProject.Application
组合触发
有办法解决吗 以下是一些可以尝试的建议:
projapp.Visible=True
以帮助调试问题Set prj=projapp.Projects(…..
FWIW我无法在project pro 2013从project server打开文件时复制此问题。我使用此选项从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
函数GetX(Str作为字符串)作为对象
Dim应用程序作为对象
出错时继续下一步
Set app=GetObject(,Str)
如果错误号为0,则
Set app=CreateObject(Str)
app.Visible=False
应用程序。清除
如果结束
设置GetX=app
端函数
然后调用模块中的函数
Set ProjApp = GetX("MSProject.Application")
projapp.FileOpenEx Name:="<>\Name of my project", ReadOnly:=False
Set prj = Projects("Name of my project")
Set ProjApp=GetX(“MSProject.Application”)
projapp.FileOpenEx名称:=“\Name of my project”,只读:=False
设置prj=项目(“我的项目名称”)
关于第1行,我没有看到添加该行的更改。我重写了代码以使用CreateObject而不是New,并得到了相同的错误。我做了(3)中提到的更改以限定引用,没有更改。除非手动打开项目时出现弹出框(例如,选择配置文件)使用CreateObject和手动打开(使用GetObject)之间的唯一区别似乎是时间;因此,尝试使用Excel的等待方法暂停一秒钟左右,然后再尝试打开文件。我添加了20秒的等待时间-应该足够长,因为计划大约在4分钟后打开。同样的错误。是否每个project server文件都会发生这种情况?本地保存.mpp文件如何?@RachelHettinger是所有服务器文件。否,本地.mpp文件不受影响。
Set ProjApp = GetX("MSProject.Application")
projapp.FileOpenEx Name:="<>\Name of my project", ReadOnly:=False
Set prj = Projects("Name of my project")