我想使用SAS使用DDE操作现有的Excel工作表:

我有以下代码(请注意!由于Excel中的德语设置,我将z用作r(ows),将s用作c(columns)):

option noxwait noxsync;
x call "C:\Program Files (x86)\Microsoft Office\Office15\EXCEL.EXE";

%let delay=5;

data _null_;
rc=sleep(&delay);
run;

filename sas2xl dde 'excel|system';

data _null_;
rc=sleep(&delay);
run;

%let mapwkbk=H:\odstest.xlsx;

data _null_;
file sas2xl;
rc=sleep(&delay);
put '[open("' "&mapwkbk" '")]';
run;


filename random dde 'excel|Daten!z2s1:z100s3';
data _null_;
    set sashelp.class;
    file random;
    put name sex age;
run;


data _null_;
file sas2xl;
/*rc=sleep(&delay);*/
put '[workbook.select("Pivot")]';
put '[select("Z2S1")]';
put "[pivot.refresh()]";

put '[workbook.select("Daten")]';
put '[select("z1S2:z1s5")]';
put '[filter]';
put '[select("z1S10")]';
put '[filter]';

put '[column.width(0,"s1",false,1)]';
put '[column.width(0,"s6:s9",false,1)]';

put '[ActiveSheet.Protect("***")]';

put '[workbook.delete("Dim")]';


/*put "[save()]";*/
/*put "[quit()]";*/
run;


现在,我想用密码保护工作表Daten并将选项use autofilter设置为活动状态。任何想法如何达到这一目标?

最佳答案

我在这里的建议是编写一个宏来执行您想做的事情(两个问题都在这里),然后如果必须使用DDE,则使用DDE调用该宏。这比使用DDE来做每件事都容易得多,并且维护起来也容易得多(当您最终离开DDE时,更便于携带)。

如果这样做的话,那么您的宏代码就不会包含所有额外的SAS语言位,并且可以更轻松地读取/维护(即使是VBA开发人员而不是SAS开发人员),而SAS只是调用该宏,很容易做到。

DDE是一种不再受很好支持的旧技术,并且在可能的情况下应该放弃新的开发。

关于excel - SAS使用DDE保护Excel工作表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47281795/

10-10 23:36