我想将我的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