こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

エクセルVBA Sell関数で起動したアプリの終了

エクセルで出退勤時間管理のマクロを作っています。
sheet1にデスクトップ用の時計をShell関数を使って貼り付けましたが、他のシートを選択した時も時計が表示されてしまいます。他のシートを選択した時は、時計のプログラムを終了させたいのですが、マクロのコードをどの様に記述したらよいかわかりません。
どなたか、詳しい方、ご教授お願いします。

投稿日時 - 2008-05-10 22:38:12

QNo.4012692

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

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メソッドを使うことも検討してください。

参考URL:http://msdn.microsoft.com/ja-jp/library/cc364356.aspx

投稿日時 - 2008-05-11 15:52:41

お礼

早速の回答、ありがとうございました。

投稿日時 - 2008-05-14 19:56:38

あなたにオススメの質問