- 締切済み
エクセルVBA Sell関数で起動したアプリの終了
エクセルで出退勤時間管理のマクロを作っています。 sheet1にデスクトップ用の時計をShell関数を使って貼り付けましたが、他のシートを選択した時も時計が表示されてしまいます。他のシートを選択した時は、時計のプログラムを終了させたいのですが、マクロのコードをどの様に記述したらよいかわかりません。 どなたか、詳しい方、ご教授お願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- nda23
- ベストアンサー率54% (777/1415)
WindowsAPIで行う方法と、WMIを使う方法があります。 #1 WindowsAPIを使う方法 Declare Function OpenProcess Lib "kernel32" _ (ByVal dwDesiredAccess As Long, _ ByVal bInheritHandle As Long, _ ByVal dwProcessId As Long) As Long Declare Function TerminateProcess Lib "kernel32" _ (ByVal hProcess As Long, _ ByVal uExitCode As Long) As Long Declare Function CloseHandle Lib "kernel32" _ (ByVal hObject As Long) As Long Sub プロセス終了(ByVal プロセスID As Long) Dim プロセスハンドル As Long プロセスハンドル = OpenProcess(1, 0, プロセスID) TerminateProcess プロセスハンドル, 0 CloseHandle プロセスハンドル End Sub #2 WMIを使う方法 Sub プロセス終了(ByVal プロセスID As Long) Dim Services, ObjectSet, ObjectEx Set Services = GetObject("winmgmts:\\.\root\cimv2") Set ObjectSet = Services.ExecQuery("Select * From Win32_Process WHERE ProcessID=" & CStr(プロセスID)) For Each ObjectEx In ObjectSet ObjectSet.Terminate 0 Next End Sub Shell関数を使わず、WSHのExecメソッドを使うことも検討してください。
お礼
早速の回答、ありがとうございました。