BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
sasone
Quartz | Level 8

VBAまたはVBSからSASを制御されている方は多いと思います。
しかしSASとVBとを同期させる方法が分かりません。
以下のようなVBSがあったとします
(単純にsas.helpclassデータをproc printにて外部ファイルに吐いているだけのものです)。

 

Set Shell=CreateObject("WScript.Shell")
Set WS = WScript.CreateObject("SAS.Application")
WS.Submit "ods rtf file='D:\Class.rtf';"
WS.Submit "proc print data=sashelp.class; run;"
WS.Submit "ods rtf close;"
WS.Quit
Shell.popup "プリント終了しました",1

 

上記を実行しますと、"プリント終了しました"のメッセージが明らかに
SASの活動より前に出て来てしまいます
(上記プログラムは単純化されすぎていて、余り時間差が感じられないかも知れませんが、
もう少し複雑なプログラムでしたらよく分かるかと思います)。
SASの活動がQuitされた後に、VBの活動が始まるようなオプションはございますでしょうか。
以上ご教示のほど、よろしくお願いいたします。

1 ACCEPTED SOLUTION

Accepted Solutions
sasone
Quartz | Level 8

izumi123さま

 

早速のご回答、誠に有難うございました。
ご提示のプログラムを試させて頂いたところ、
確かに設定時間の10秒後にpopupが出てくれました。

同期していると思います。
有難うございました。

View solution in original post

4 REPLIES 4
working-dog
SAS Employee

Async Propertyが使えるかも知れません。

手元に環境がないのですぐに確認できませんが、時間ある時に試してみます。

http://support.sas.com/rnd/itech/doc/dist-obj/comdoc/ilngca.html

 

izumi_sas
SAS Employee

少し納得いっていない部分がありますが、以下のように記述することで私の環境では目的を達成できました。納得できていないのは、「Wait=True」の行が必要なことです。どのような環境でも同じ挙動を示すかどうかはわかりません。ドキュメントにはないプロパティです。。。

(Asyncプロパティは使えませんでした)

 

Set Shell=CreateObject("WScript.Shell")
Set WS = WScript.CreateObject("SAS.Application")

WS.Wait = True

WS.Submit "data _null_;"
WS.Submit "set sashelp.class(obs=1);"
WS.Submit "rc = sleep(10);"
WS.Submit "run;"

Do while x=0
   If (WS.Busy) then
      WScript.Sleep 1000
   Else
      x=1
   End If
Loop

WS.Quit
Shell.popup "プリント終了しました",1

参考にした場所:

http://support.sas.com/documentation/cdl/en/hostwin/69955/HTML/default/viewer.htm#n11z7anzj7o76cn0zw...

 

環境:

SAS9.4M5

Windows10

Microsoft (R) Windows Script Host Version 5.812

 

お役に立てれば幸いです。

 

sasone
Quartz | Level 8

izumi123さま

 

早速のご回答、誠に有難うございました。
ご提示のプログラムを試させて頂いたところ、
確かに設定時間の10秒後にpopupが出てくれました。

同期していると思います。
有難うございました。

sasone
Quartz | Level 8

working-dogさま

 

早速のご回答、誠に有難うございました。
Asyncプロパティを用いてプログラムを下記のように書き換えましたところ、
確かにClass.rtfが出来た後にpopupが出てくれるようになりました。
ただ同期しているのかまでは、よく分かりませんでしたので
Asyncプロパティをもう少し検証してみたいと思います。

 

Set Shell=CreateObject("WScript.Shell")
Set WS = WScript.CreateObject("SAS.workspace")
Set LS = WS.LanguageService
LS.Async = True
LS.Submit "ods rtf file='D:\Class.rtf';"
LS.Submit "proc print data=sashelp.class; run;"
LS.Submit "ods rtf close;"
WS.Close
Shell.popup "プリント終了しました",1