5

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

当我手动运行 SAS 程序时,它完全按计划运行。它打开反过来触发 VBA 宏的 Excel 文件。但是,当我在我的服务器上安排 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 工具来设置作业。我所有的其他工作都运行良好。是否需要更改某些内容才能使其按预期工作?

4

1 回答 1

1

我同意 Joe 对 DDE 的评论,即它不起作用,但是您通过 X 命令所做的是进行系统调用,就好像它在命令行上一样,而不是在 DDE 上。如果要调试系统调用,请尝试使用 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;

我也刚刚注意到.xslm 的示例路径使用“\\”,如果实际路径是这样开始的,那么这可能是你的问题。您不能在像这样的标准系统调用中使用 UNC 路径(某些命令行程序允许它们)。您需要先映射文件服务器并共享到驱动器。如果是这种情况,请告诉我,如果您需要,我可以帮助您。

于 2016-08-11T11:04:09.030 回答