2015-06-29 15 views
5

Tôi đã viết một đoạn mã trong SAS EG chỉ đơn giản là mở một sổ làm việc Excel. Sổ làm việc Excel chứa mã VBA được thực thi khi sự kiện "Mở sổ làm việc". Tất cả các mã khá nhiều hiện, là nó làm mới tất cả các kết nối dữ liệu lần đầu tiên nó được mở ra mỗi ngày.Chạy SAS Enterprise Guide Công việc trên windows Server

Khi tôi chạy chương trình SAS theo cách thủ công, nó hoạt động chính xác như được lên kế hoạch. Nó mở tập tin Excel mà lần lượt kích hoạt VBA Macro. Tuy nhiên, khi tôi lên lịch cho công việc SAS EG trên Máy chủ của mình, Lệnh in sẽ chạy nhưng không có gì xảy ra với tệp Excel của tôi. Tôi cũng không gặp phải bất kỳ lỗi nào trong mã SAS của tôi hoặc trên Nhật ký Trình lập lịch biểu của tôi.

Đây là mã SAS của tôi:

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

Đây là VBA của tôi:

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 

Và sau đó tất nhiên tôi sử dụng công cụ Scheduling SAS EG để thiết lập công việc. Tất cả các công việc khác của tôi đều chạy tốt. Có điều gì tôi cần phải thay đổi để điều này có hiệu quả như mong đợi không?

+0

Bạn đã thử điều này: http://stackoverflow.com/questions/2050505/way-to-run-excel-macros-from-command-line-or-batch-file hoặc điều này: http: // stackoverflow .com/questions/10881951/how-to-launch-an-excel-macro-từ-command-line-without-worksheet-open-event? – Ralph

+0

@Ralph Tôi đã cố gắng làm đúng. Đối với một số lý do khi tôi chạy mã SAS từ Base SAS thay vì EG, nó hoạt động. Cảm ơn anyway – Herm

+0

Tôi không nghĩ rằng DDE làm việc trong một môi trường máy chủ hoặc không tương tác, vì nó sử dụng phiên tương tác của bạn. – Joe

Trả lời

1

Tôi đồng ý với nhận xét của Joe về DDE rằng nó sẽ không hoạt động, nhưng những gì bạn đang thực hiện thông qua lệnh X đang thực hiện cuộc gọi hệ thống như trên dòng lệnh chứ không phải DDE. Nếu bạn muốn gỡ lỗi các cuộc gọi hệ thống, hãy thử sử dụng cú pháp FileName Pipe để xem đầu ra lệnh trong nhật ký SAS.

Trong trường hợp của bạn ...

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; 

Tôi cũng chỉ nhận thấy con đường dụ của bạn vào .xslm sử dụng "\\", nếu con đường thực sự bắt đầu như thế này thì đó là khả năng vấn đề của bạn. Bạn không thể sử dụng đường dẫn UNC trong các cuộc gọi hệ thống tiêu chuẩn như thế này (một số chương trình dòng lệnh cho phép chúng). Bạn cần phải ánh xạ máy chủ tệp và chia sẻ lên một ổ đĩa trước tiên. Hãy cho tôi biết nếu đây là trường hợp tôi có thể giúp bạn nếu bạn cần nó.

Các vấn đề liên quan