![](/img/trans.png)
[英]Bug in VBA in MSProject how to check if sub project is loaded in master project?
[英]method 'fileopenex' of object '_MSProject' failed when automating MS Project from VBA
我有一個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 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
的組合觸發。
有什么辦法解決嗎?
以下是一些建議嘗試:
projapp.Visible = True
可幫助調試問題。 Dim prj as MSProject.Project
並Set prj = projapp.Projects(....
FWIW我無法使用Project Pro 2013從項目服務器打開文件來復制此問題。
我用它來自動從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")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.