Shell関数で起動したアプリケーションの終了を認識する方法 |
VBA を使用して、 Shell 関数でアプリケーションを起動し、そのアプリケーション終了後にマクロを継続する方法を紹介します。 |
をご覧になる前にこの文書は Excel 97
のプログラミングツールを使用して Excel 97
のアプリケーションを作成でき、かつ
Microsoft(R) VisualBasic(R) Programming
SystemApplications Edition (以下 VBA)
を十分に理解している方を対象とします。 VBA に関する詳細な情報はオンラインヘルプを、 Win32 API 関数に関する詳細な情 報はマイクロソフト デベロッパーズ
ネットワーク (MSDN) レベル 2 で提供される
Win32 SDK をご覧ください。 ■ サンプルプロシージャ名: TaskEnd このサンプルは、このサンプルではメモ帳を起動し、メモ帳での処理終了後、メッセージボックスを表示させています。 ---------------------------------------------------------------------------- Public Declare Function GetExitCodeProcess Lib "kernel32" _ (ByVal hProcess As Long, lpExitCode As Long) As Long Public Declare Function OpenProcess Lib "kernel32" _ (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, _ ByVal dwProcessID As Long) As Long Public Const PROCESS_QUERY_INFORMATION = &h400 ---------------------------------------------------------------------------- Sub TaskEnd() Dim dwProcessID As Long Dim hProcess As Long Dim lpdwExitCode As Long Dim ret As Long dwProcessID = Shell("C:\WINDOWS\NOTEPAD.EXE", 1) hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, True, dwProcessID) Do ret = GetExitCodeProcess(hProcess, lpdwExitCode) DoEvents Loop While lpdwExitCode MsgBox "メモ帳は終了しました。" End Sub ---------------------------------------------------------------------------- ■ 操作手順
■ 解説VBA
から外部のプログラムを起動するには Shell
関数を使用しますが、 VBA の Shell
関数はプログラムを非同期的に実行するため、起動したプログラムが終了したかどうかを確認せず次のコードに制御が移ります。Shell
関数により起動したプログラムの処理が終了した時点で次のコードに制御を移すには、
Win32 API 関数を利用することで、 Shell
関数により起動したプログラムの処理が終了したかどうか認識することができます。 |