vb質問030219
あるステップでShell関数によってプログラムを起動し、それよって生成されるファイルを次のステップで開いて参照する場合、ファイルが生成するまで待機するにはどうすればよいのでしょうか?
次のようなコードでは、ファイルを参照できません。
MyPath="c:\中略\myprogram.exe" 'myresult.txtを生成するプログラム
RetVal = 0
RetVal = Shell(MyPath, 1)
For j=0 to 100000 'このように待機させても効果がありません
Next
MyPath="c:\中略\myresult.txt"
If RetVal <> 0 Then
Open MyPath For Input As #1
Line Input #1, MyText
Close #1
MsgBox "MyText=" & MyText
Else
MsgBox "MyTextが生成できませんでした"
End If
しかしながら、myrogram.exeの実行結果としてmyresult.txtは生成されていて、イミディエートウィンドウではRetValは0以外の値になります。
MyPath="c:\中略\myprogram.exe" 'myresult.txtを生成するプログラム
RetVal = 0
RetVal = Shell(MyPath, 1)
MyPath="c:\中略\myresult.txt"
Do Until (Len(Dir$(MyPath)) > 0)
Loop
If RetVal <> 0 Then
Open MyPath For Input As #1
Line Input #1, MyText
Close #1
MsgBox "MyText=" & MyText
Else
MsgBox "MyTextが生成できませんでした"
End If
これでどう?
あ、ごめん間違えた。
Do〜LoopをOpenの前に移動して。
Shell関数で無くても良いのであれば、かわりに
WSHShell.Runメソッドを使ってみては如何でしょう。
' RetVal = Shell(MyPath, vbNormalFocus)
RetVal = CreateObject("WSCript.Shell").Run(MyPath, vbNormalFocus, True)
Runメソッドの第3引数にTrueを指定しておけば、
起動したプログラムが終了するまで、
呼出側の処理を待機させることができます。
ツイート | ![]() |