プロが教える店舗&オフィスのセキュリティ対策術

ExcelVBAについての質問です。コマンドプロンプトで実行するプログラムをCで作成しました(これをXXX.exeとします)。このプログラムは計算が終了した後で、その結果のファイルを作成します(これをYYY.txtとします)。このプログラムを操作し、結果を表にして出力するために、ExcelVBAでshellを使って以下のようなプログラムを作成しました。
  shell("XXX.exe")
  call Output
Outputでは、XXX.exeが作成したファイルYYY.txtからデータを読み込んでシートに結果を出力するのですが、うまくファイルを読み込みません。多分、shellにより実行したXXX.exeが終了する前にOutputが呼ばれているのだと思うのですが、もしそうだとしたらどのような解決方法があるのでしょうか。よろしくお願いします。
WinXp、Excel2000です

A 回答 (3件)

ret = shell("XXX.exe")


とし、CのEXEは戻り値を返すようにしたらいかがでしょう?

戻り値が取得できなけば、処理は勝手に前へ進まないと思いますが…。
    • good
    • 0
この回答へのお礼

XXX.exeは戻り値を返すのですが、shell関数はタスクIDを返すのでうまくいかないのではないのでしょうか

お礼日時:2003/05/15 21:30

VBならこういう風にするのですが...


ExcelVBAでは確認していませんが。
http://www.ops.dti.ne.jp/~allergy/vb/vbvba.html# …

参考URL:http://www.ops.dti.ne.jp/~allergy/vb/vbvba.html# …
    • good
    • 2
この回答へのお礼

教えていただいた方法をExcelVBAで試してみましたが、shellで実行したプログラムの終了を待つことができ、思い通りの処理を行うことができました。ありがとうございました。

お礼日時:2003/05/15 21:37

こんにちは。



TimerとDirでYYY.txtの作成を待つとか。。

Sub Test()
Dim i As Integer, Start
Shell("XXX.exe")
i = 0
Do While i < 10 And Dir("C:\YYY.txt") = ""
  Start = Timer
  Do While Timer < Start + 0.5
   DoEvents
  Loop
 i = i + 1
Loop
If i = 10 Then Exit Sub
Call Output
End Sub

でもきちんとプロセス終了を待つのが正でしょうね。^^;

http://www2.moug.net/cgi-bin/technic.cgi?exvba+T …

参考URL:http://www2.moug.net/cgi-bin/technic.cgi?exvba+T …
    • good
    • 0
この回答へのお礼

XXX.exeですが、2回目以降の実行では同じファイル名に上書きして結果を出力するので、Dirを使った方法では以前の結果を読み込むことになってしまいます。教えていただいた参考URLの方法はXXX.exeの終了を待つことができるのでうまくいきました。ありがとうございました。

お礼日時:2003/05/15 21:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!