SAS使用DDE保护Excel工作表

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

我有下面的代码(注意!因为Excel中的德语设置,我使用z(rows)和s(c)(列)):

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活跃。 任何想法如何达到这个?

我的build议是编写一个macros来做你正在做的事情(这两个问题都是真的),然后使用DDE调用这个macros,如果你必须使用DDE的话。 这比使用DDE来做每件小事要容易得多,而且维护起来要容易得多(当你最终离开DDE的时候更加便于携带)。

如果你这样做的话,那么你的macros代码就没有所有额外的SAS语言位,并且可以更容易地读取/维护(即使是VBA开发者而不是SAS开发者),SAS只是调用macros很容易做到。

DDE是一个不再被很好支持的旧技术,新的发展应该尽可能地远离它。