Connect to a project server when opening MS Project

梦想与她 提交于 2019-11-29 16:26:56

Here is the real issue:

Basically it fails because the macro that is being called opens files from project server.

In order to automate MS Project and have it open to a project server, you need to use a command line switch as follows:

VBScript

On Error Resume Next
Dim pjApp 
Set pjApp = GetObject(, "MSProject.Application")
If Err.Number <> 0 Then
    Dim ProjServer
    ProjServer = Chr(34) & "enter project server name here" & Chr(34)
    Set objShell = WScript.CreateObject("WScript.Shell")
    objShell.Run "winproj /s " & ProjServer, 1, True
    Set objShell = Nothing 
    WScript.Sleep 5000
    Set pjApp = GetObject(, "MSProject.Application")
End If
pjApp.Macro "testsave"

The code first checks to see if MS Project is already open and if so, uses that instance. Otherwise it uses the shell command to open to a specific project server. Here is the documentation for the command line switches: Command-line switches for Microsoft Office Project

Note: Update sleep value as necessary to give MS Project enough time to open before trying to get a reference to it.

VBA version

On Error Resume Next
Dim pjApp As MSProject.Application
Set pjApp = GetObject(, "MSProject.Application")
If Err.Number <> 0 Then
    Dim ProjServer As String
    ProjServer = Chr$(34) & "enter project server name here" & Chr$(34)
    Shell "C:\Program Files (x86)\Microsoft Office\Office14\Winproj.exe /s " & ProjServer, vbNormalFocus
    Do While pjApp Is Nothing
        DoEvents
        Set pjApp = GetObject(, "MSProject.Application")
    Loop
End If
pjApp.Macro "testsave"

Note: Update the path to Winproj.exe as necessary.

In place of pjApp.macro try:

pjApp.Appllication.Run "testsave"

I know that it is weird that the .macro version works for the code above it; however, it is still worth a shot. This code should also work for both places where you are using the .macro method.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!