« マイコンピュータゾーンになる汎用のURLになりそうなもの | トップページ | ショートカットに相対パスを指定する。 »

2008年1月 7日 (月)

Excelの終了を待ち合わせる。

CreateObject()したExcelプロセスの終了をどうやったら待てるか?
ExcelをCreateObject()して、ユーザがGUIで操作してからExcelを閉じたのをどうやったら検出できるか?

方法1

Excelへの参照を保持したままでは、ユーザがGUI操作でExcelを閉じても、Excelプロセスは終了しません。
でも、非表示にはなるので、Application.Visible=False で代用できます。
その後にExcelへの参照を解放すれば、Excelプロセスは終了します。

Set Application=CreateObject("Excel.Application")
Application.Visible=True
Application.UserControl=True
Do While Application.Visible=True
  WScript.Sleep 1000
Loop
Set Application=Nothing
WScript.Echo "終了"

方法2

Excelへの参照を解放しておけば、ユーザがGUI操作でExcelを閉じると、Excelプロセスも終了します。
その場合は、先にExcelのプロセスIDを調べておいて、そのプロセスの終了を監視すればよいのです。

Set Application=CreateObject("Excel.Application")
Application.Visible=True
Application.UserControl=True
PID=Application.ExecuteExcel4Macro("CALL(""Kernel32"",""GetCurrentProcessId"",""J"")")
Set Application=Nothing
Do While GetObject("winmgmts:\\.\root\CIMV2").ExecQuery("SELECT * FROM Win32_Process WHERE ProcessID="&PID).Count
  WScript.Sleep 1000
Loop
WScript.Echo "終了"

« マイコンピュータゾーンになる汎用のURLになりそうなもの | トップページ | ショートカットに相対パスを指定する。 »