我想將我的VBA代碼實現到我的SAS代碼中,所以我可以在一次運行中完成整個過程。我的SAS代碼讀取一個大的SAS表格,進行一些轉換,最後導出到一個Excel文件(代碼如下)。我還在Excel文件中編寫了一些VBA代碼(例如一些變量的自動過濾,你可以看到下面的代碼)。在sas中寫入vba代碼
表看起來是這樣的:
A B C Var1 Var2 Var3
--------------------
1 1 1 10 15 20
1 1 2 15 20 30
1 2 1 20 30 40
1 2 2 30 40 50
2 1 1 40 50 60
2 1 2 50 60 70
2 2 1 60 70 80
..............
..............
然而,我要實現我的VBA代碼到我的SAS代碼,這樣我就可以一次運行做的全過程。我知道如何打開和運行SAS中的Excel文件(代碼如下),但我不知道如何在SAS中實現VBA代碼。
如果你想知道爲什麼我想實現我的SAS我的宏代碼,我會在今後發生類似的SAS-表很多次工作,所以它會更practicle以保持整個代碼在一個地方。
我剛剛意識到我無法以支持宏的Excel格式(XLSM)在SAS中導出表格。我想這也是一個挑戰。另外,從Excel文件中保存宏代碼的操作不太現實,因爲它必須保存在Adds-in菜單中。所以在一個地方處理整個過程會好很多,就像在SAS編輯器裏面一樣。
在SAS中的代碼,其出口的最終表到Excel文件:
PROC EXPORT DATA=File1
OUTFILE= "&server\&env\test1.xlsx"
DBMS=EXCEL REPLACE;
SHEET="sheet1";
RUN;
在Excel文件的VBA代碼示例爲在Excel文件變量創建自動篩選:
Sub Macro1()
Dim N As Long, r As Range
With Sheets("sheet1")
N = .Cells(Rows.Count, "B").End(xlUp).Row
ReDim ary(1 To N)
For i = 1 To N
ary(i) = .Cells(i, 1)
Next i
End With
Range("A1:F20").AutoFilter
ActiveSheet.Range("$A$1:$F$20").AutoFilter Field:=1, Criteria1:=ary, Operator:=xlFilterValues
End Sub
在SAS的代碼來啓動和運行SAS Excel文件:
OPTIONS NOXWAIT NOXSYNC;
DATA _NULL_;
RC=SYSTEM('START EXCEL');
RC=SLEEP(0.5);
RUN;
FILENAME CMDS DDE 'EXCEL|SYSTEM';
DATA _NULL_;
FILE CMDS;
PUT "[OPEN(""&server\&env\test1.XLS"")]";
PUT '[RUN("Macro1")]';
PUT '[SAVE.AS("&server\&env\FORMATTED_FILE.XLSM")';
PUT "[QUIT()]";
RUN;
QUIT;
? – Joe
基本上,是的。我希望我的SAS代碼能夠讀取SAS表,將結果導出到Excel文件(如果可能的話,XLSM),我的SAS代碼也會運行一些VBA代碼來使Excel文件更美觀。 我希望所有這些進程只用一個代碼運行一次... – user3714330
你運行的excel宏總是一樣的嗎?將使用Excel模板的方法工作?我認爲這是做這件事的標準方法;將excel宏存儲在靜態的「模板」工作簿中,然後從那裏執行(寫入不同的工作簿,或寫入模板工作簿,然後另存爲不同的工作簿名稱)。 – Joe