Home > 即効テクニック > Excel VBA > その他関連のテクニック > 外部プログラムの実行と処理待ち

即効テクニック

その他関連のテクニック

外部プログラムの実行と処理待ち

(Excel 97/2000)
外部プログラムを実行するには、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