在Windows Server上运行SAS Enterprise Guide作业

我已经在SAS EG中编写了一段代码,只是打开一个Excel工作簿。 Excel工作簿包含在“工作簿打开”事件中执行的VBA代码。 所有的代码几乎都是这样的,是它每天第一次刷新所有的数据连接。

当我手动运行SAS程序时,它完全按照计划运行。 它打开Excel文件,然后触发VBAmacros。 当我在我的服务器上安排SAS EG作业时,作业运行,但是我的Excel文件没有任何反应。 我也没有在我的SAS代码或我的Windows计划日志中出现任何错误。

这是我的SAS代码:

options noxwait noxsync; x '"C:\Program Files\Microsoft Office\Office15\excel.exe" "\\route\to\file\excel_macro_playground.xlsm"'; run; 

这是我的VBA:

 Private Sub Workbook_Open() Dim wsSheet As Worksheet On Error Resume Next Set wsSheet = Sheets("book_helper") On Error GoTo 0 If wsSheet Is Nothing Then Sheets.Add.Name = "book_helper" ActiveWorkbook.RefreshAll Sheets("book_helper").Range("A1").Value = Date Sheets("book_helper").Visible = xlVeryHidden Application.DisplayAlerts = False ThisWorkbook.Save Application.DisplayAlerts = True Application.Quit Else If Sheets("book_helper").Range("A1").Value < Date Or Sheets("book_helper").Range("A1").Value = "" Then ActiveWorkbook.RefreshAll Sheets("book_helper").Range("A1").Value = Date Sheets("book_helper").Visible = xlVeryHidden 'ActiveWorkbook.Close savechanges:=True 'Application.Quit Application.DisplayAlerts = False ThisWorkbook.Save Application.DisplayAlerts = True Application.Quit End If End If End Sub 

然后我使用SAS EG Scheduling工具来设置这个工作。 我所有的其他工作都运行得很好。 有什么我需要改变,以便按预期工作?

我同意Joe对DDE的评论,它不会起作用,但是你通过X命令正在做的是在系统调用中,就好像它在命令行上,而不是DDE。 如果要debugging系统调用,请尝试使用FileName Pipe语法来查看SAS日志中的命令输出。

在你的情况下…

 FileName myCall Pipe '"C:\Program Files\Microsoft Office\Office15\excel.exe" "\\route\to\file\excel_macro_playground.xlsm"'; Data _NULL_; InFile myCall length=lineLength; Input line $varying256. lineLength; Put line; Run; 

我也刚刚注意到你的示例path.xslm使用“\\”,如果实际path像这样开始,那么这可能是你的问题。 你不能像这样在标准的系统调用中使用UNCpath(一些命令行程序允许它们)。 您需要首先映射文件服务器并共享到驱动器。 让我知道如果是这样的话,我可以帮你,如果你需要它。