外部プログラムの実行と処理待ち
 外部プログラムを実行するには、Shell関数を使用しますが、
ここで問題になるのが、Shell関数は実行中の処理の終了を待たない
ということです。

 そこで、以下のサンプルマクロでは、Shell関数を使用して
外部プログラムを実行し、そのプログラムが終了するまで待つように
処理を施してあります。

'--- Win32 API 関数の宣言 ---
Declare Function WaitForSingleObject Lib "kernel32" _(ByVal hHandle As Long, _
                                                     ByVal dwMilliseconds As Long) As Long

Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _
                                             ByVal bInheritHandle As Long, _
                                             ByVal dwProcessId As Long) As Long

Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

'--- Win32 API 定数の宣言 ---
Global Const PROCESS_ALL_ACCESS As Long = &H1F0FFF
Global Const INFINITE As Long = &HFFFF

Sub WaitRun()

    Dim TaskId As Long          'タスクID
    Dim hProc  As Variant       'プロセスハンドル

    ' 外部プログラムの実行
    TaskId = Shell("c:\Test.bat", 2)
    
    ' プロセスハンドルの取得
    hProc = OpenProcess(PROCESS_ALL_ACCESS, False, TaskId)
    
    ' プロセスのオープン
    If OpenProcess(PROCESS_ALL_ACCESS, False, TaskId) <> vbNull Then
        ' プロセスのシグナル待ち
        Call WaitForSingleObject(hProc, INFINITE)
        ' プロセスクローズ
        CloseHandle hProc
    End If
    
End Sub

Excel97/2000



戻る


Excel Word Access VBA! モーグ