ご覧いただきありがとうございます。
ExcelVBAのプロセス制御の件でわからないことがありますので質問させていただきます。
ぜひともアドバイスをいただければと思います。
現状と実現したいこと
Windows10-Pro-64bitで、ExcelVBAとBATファイルを連携させたものを組み込んでおります。
(Teratailに投稿して差し支えないように簡素にアレンジしました)
現状と目的について、下図で説明させていただきます。
=======ご指摘による補足
BATファイルは、他チームが開発したもので改変できないものとします。
発生している問題
GetObject("winmgmts:").ExecQuery
で、いきなりプロセスID(cmd.exe)を取得するのが、正当なやり方かどうかが見えてこないですが。
取得したプロセスID(cmd.exe)が、終了するまで待機させる方法が見つからないのが問題点です。
該当のソースコード
★hoge.xlsm (VBA本体)
VBA
1Sub ボタン1_Click() 2 3 Dim wsh As Object 4 Set wsh = CreateObject("Wscript.Shell") 5 Dim retn As Long 6 7 'ここでhoge1.batをRun(cmd.exe)で起動。(hoge2.batを呼び出し後すぐに消失) 8 retn = wsh.Run("C:\hoge1.bat", 1, True) 9 10 11 Dim objWk As Object 12 Dim objXlsProc As Object 13 14 'hoge1.batから自動的に呼び出されたhoge2.bat(cmd.exe)のプロセスIDを取得したい 15 Set objWk = GetObject("winmgmts:").ExecQuery("SELECT Handle FROM Win32_Process WHERE Name = 'cmd.exe'") 16 For Each objXlsProc In objWk 17 Debug.Print objXlsProc.Handle 18 19 20 Next 21 22'''''''''[ここでのTODO] 23'''''''''objXlsProc.HandleでプロセスIDを取得して、このプロセスが 24''''''''''処理終了するまでここのタイミングでWAITさせたいのが目的です。 25 26End Sub
★hoge1.bat
BAT
1@echo off 2TIMEOUT 5 3START C:\hoge2.bat
★hoge2.bat
BAT
1TIMEOUT 10 2echo "End"
参考
(1)https://okwave.jp/qa/q655810.html
(2)https://teratail.com/questions/36610
(3)https://www.moug.net/tech/exvba/0150034.html
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/23 08:46