我有一个vbscript,检查MS Project是否打开。如果它已经打开它运行一个宏,如果不是它应该打开Project然后运行宏。如果Project已经打开,它可以正常工作。如果项目未打开,则脚本会成功打开并运行宏但在中途失败。基本上它失败了,因为被调用的宏从项目服务器打开文件。即使将我的默认帐户设置为项目服务器网址,也可以在启动'设置为'选择我的默认帐户'它仍然失败。
vbscript打开&运行宏:
dim pjApp
on error resume next
set pjApp = GetObject(, "MSProject.Application")
if err.Number = 0 then
pjApp.Visible = True
pjApp.macro "testsave"
else
Set pjApp = CreateObject("MSProject.Application")
pjApp.Visible = True
pjApp.macro "testsave"
end if
Set pjApp = Nothing
项目打开时,有没有办法强制它连接到项目服务器站点?
答案 0 :(得分:0)
代替pjApp.macro尝试:
pjApp.Appllication.Run "testsave"
我知道.macro版本适用于它上面的代码是很奇怪的;然而,它仍然值得一试。此代码也适用于您使用.macro方法的两个地方。
答案 1 :(得分:0)
这是真正的问题:
基本上它失败了,因为被调用的宏从项目服务器打开文件。
为了自动化MS Project并将其打开到项目服务器,您需要使用命令行开关,如下所示:
<强>的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"
代码首先检查MS Project是否已经打开,如果是,则使用该实例。否则,它使用shell命令打开特定的项目服务器。以下是命令行开关的文档: Command-line switches for Microsoft Office Project
注意:根据需要更新睡眠值,以便在尝试获取对它的引用之前为MS Project提供足够的时间打开。
VBA版
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"
注意:根据需要更新Winproj.exe的路径。