2015-06-29 11 views
5

Ho scritto una parte di codice in SAS EG che apre semplicemente una cartella di lavoro di Excel. La cartella di lavoro di Excel contiene il codice VBA che viene eseguito sull'evento "Workbook Open". Tutto il codice fa molto bene, aggiorna tutte le connessioni dati la prima volta che viene aperto tutti i giorni.Esecuzione di SAS Enterprise Guide Job su Windows Server

Quando si esegue manualmente il programma SAS, funziona esattamente come pianificato. Apre il file Excel che a sua volta attiva la macro VBA. Quando pianifico il lavoro SAS EG sul mio server, tuttavia, il lavoro viene eseguito ma non accade nulla al mio file Excel. Inoltre, non viene presentato alcun errore nel mio codice SAS o nel mio registro di pianificazione di Windows.

Ecco il mio codice SAS:

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

Ecco il mio 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 

E poi, naturalmente, a utilizzare lo strumento di pianificazione SAS EG per impostare il lavoro. Tutti i miei altri lavori stanno andando bene. C'è qualcosa che devo cambiare perché funzioni come previsto?

+0

Hai provato questo: http://stackoverflow.com/questions/2050505/way-to-run-excel-macros-from-command-line-or-batch-file o questo: http: // stackoverflow .com/domande/10881951/how-to-launch-un-excel-macro-da-riga di comando, senza-foglio-open-evento? – Ralph

+0

@ Ralph Sono riuscito a farlo bene. Per qualche motivo quando eseguo il codice SAS da Base SAS anziché da EG, funziona. Grazie comunque – Herm

+0

Non pensavo che DDE funzionasse in un server o in un ambiente non interattivo, dal momento che sta utilizzando la tua sessione interattiva. – Joe

risposta

1

Sono d'accordo con il commento di Joe su DDE che non avrebbe funzionato, ma quello che stai facendo attraverso un comando X sta facendo una chiamata di sistema come se fosse sulla riga di comando, non su DDE. Se si desidera eseguire il debug delle chiamate di sistema, provare a utilizzare la sintassi Pipe FileName per visualizzare l'output del comando nel registro SAS.

Nel tuo caso ...

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; 

Ho anche appena notato il tuo percorso di esempio al .xslm utilizza "\\", se il percorso effettivo inizia così allora questo è probabile che il vostro problema. Non è possibile utilizzare i percorsi UNC in chiamate di sistema standard come questa (alcuni programmi della riga di comando consentono loro). Dovresti prima mappare il file server e condividere su un'unità. Fammi sapere se questo è il caso in cui posso aiutarti se ne hai bisogno.

Problemi correlati