SAS EG-VB在不显示任何错误消息的情况下不起作用

时间:2020-08-06 15:20:51

标签: pdf vbscript sas rtf

我在使用VB脚本在SAS EG中将rtf转换为pdf时遇到问题。以前它是在Base SAS服务器下工作的。

我使用proc选项查看默认情况下是否打开了nocmd,但是似乎X命令已启用。

Optional

下面是我使用的系统。

proc options option=noxcmd define value;
run;

Option Definition Information for SAS Option XCMD
Group= ENVDISPLAY
Group Description: Windows and data display information
Description: Enables the X command in SAS.
Type: The option value is of type BOOLEAN
When Can Set: Session startup (command line or config) only
Restricted: Your Site Administrator can restrict modification of this option
Optsave: PROC Optsave or command Dmoptsave will not save this option NOTE: PROCEDURE OPTIONS used (Total process time):
  real time           0.00 seconds
  cpu time            0.00 seconds

%macro vbs_pdf(rtfname=,pdfname=);
        data _null_;
             length vbscmd $ 400;
             file "temp.vbs";
             put 'Dim ObjWord';
             put 'set objWord = CreateObject("Word.Application")';
             put 'objWord.Visible = True';
             vbscmd='objWord.Documents.Open("'|| "&rtfname" ||'")';
             put vbscmd;
             vbscmd='objWord.ActiveDocument.SaveAs "'||"&pdfname"||'", 17';
             put vbscmd;
             put 'objWord.ActiveDocument.Close(False)';
             put 'objWord.Application.Quit(False)';
        run;options noxwait;
        data _null_;
             command="START /WAIT CScript temp.vbs //NoLogo";
             call system(command);
             command2="DEL temp.vbs ";
             call system(command2);
        run;
    %mend;

    options noxwait;

    %vbs_pdf(rtfname=\\cifs\...\sample1.rtf,
             pdfname=\\cifs\...\sample1.pdf);

我没有在SAS EG中看到任何X命令执行。有人知道如何使这项工作吗?

1 个答案:

答案 0 :(得分:0)

不确定是否会有所帮助,但我想使用PIPE引擎允许SAS程序捕获任何操作系统消息。

data _null_;
  length command $200;
  do command="START /WAIT CScript temp.vbs //NoLogo","DEL temp.vbs";
    put command=;
    infile cmd pipe filevar=command end=eof;
    do while (not eof);
      input;
      put _infile_;
    end;
  end;
run;

还请确保当前工作目录是您可以写入temp.vbs文件的位置。否则,请为文件使用完全限定的名称,以便可以在您具有写访问权的位置创建文件。

不确定您为什么在这里使用START吗?为什么不直接调用cscript?您也可以尝试将错误消息的重定向添加到标准输出到命令的末尾。

data _null_;
  length command $200;
  do command="cScript temp.vbs 2>&1","DEL temp.vbs 2>&1";
    put command=;
    infile cmd pipe filevar=command end=eof;
    do while (not eof);
      input;
      put _infile_;
    end;
  end;
run;