2015-06-29 5 views
5

Я написал фрагмент кода в SAS EG, который просто открывает книгу Excel. Книга Excel содержит код VBA, который выполняется при событии «Workbook Open». Весь код в целом делает это, он обновляет все подключения к данным при первом открытии каждый день.Запуск Enterprise Enterprise Guide Работа на windows Server

Когда я запускаю программу SAS вручную, она работает точно так, как планировалось. Он открывает файл Excel, который, в свою очередь, запускает макрос VBA. Когда я планирую работу SAS EG на моем сервере, но выполняется Работа, но ничего не происходит с моим файлом Excel. Я также не получаю никаких ошибок в моем SAS-коде или в журнале Windows Scheduler Log.

Вот мой код 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, чтобы настроить работу. Все мои другие задания работают нормально. Есть ли что-то, что мне нужно изменить, чтобы это работало так, как ожидалось?

+0

Вы пробовали это: http://stackoverflow.com/questions/2050505/way-to-run-excel-macros-from-command-line-or-batch-file или это: http: // stackoverflow .com/вопросы/10881951/как к пуску-ан-первенствует-макро-из-командной строки-без-лист-открытого событие? – Ralph

+0

@Ralph Мне удалось это исправить. По какой-то причине, когда я запускаю код SAS из Base SAS вместо EG, он работает. Спасибо в любом случае – Herm

+0

Я не думал, что DDE работал в серверной или неинтерактивной среде, поскольку он использует ваш интерактивный сеанс. – Joe

ответ

1

Я согласен с комментарием Джо на 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-пути в стандартных системных вызовах, подобных этому (некоторые программы командной строки позволяют им). Сначала вам нужно сопоставить файловый сервер и общий доступ к диску. Позвольте мне знать, если это так, я могу вам помочь, если вам это нужно.

Смежные вопросы