掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ExcelオブジェクトからプロセスIDを取得するには? (ID:83879)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
終了命令(Quitメソッド)と、プロセスの終了と、オブジェクトの解放は独立しています。 たとえば、InternetExplorerオブジェクトに目を向けてみると、 IE.Quit IE.Visible = True のように、Quit後にオブジェクトを操作しようとすると、 実行時エラー 0x80010108(RPC_E_DISCONNECTED)の、 『起動されたオブジェクトはクライアントから切断されました。』 というオートメーションエラーとなります。 これは、Quitメソッド実行時だけでなく、ユーザー操作などにより、 IEが閉じられた場合にも、同様の結果となります。 それに対して、Excelオブジェクトの場合は、Quitメソッドや ユーザー操作で閉じられた後でも、 objExcel.Visible = True という操作を受け付けるように設計されています。 プロセスまで解放させたい場合には、Quit後に Set objExcel = Nothing などとして、オブジェクトも解放する必要があります。 > タスクバーで観察していると,Quitメソッドを抜けてもプロセスIDは残っていることがあります. この現象が起きる時は、コーディングに問題がある可能性が高いです。 オブジェクトを解放していない、もしくは解放できないようなコードに なっていないかどうかを確認してみてください。 注意すべきは、たとえば、 OK: Set objBook = objApp.Workbooks.Add() NG: Set objBook = Workbooks.Add() とか、 OK: objSheet.Range("A1") Destination:=objSheet.Range("D8") NG: objSheet.Range("A1") Destination:=Range("D8") のように、オブジェクトを修飾するのを忘れた時です。 普通は、オブジェクトを明示しないとエラーになるのですが、 Excelライブラリを参照設定している場合は、オブジェクトを省略しても、 暗黙のApplicationオブジェクトが自動生成されるため、動作してくれます。 その反面、自動生成されたオブジェクトはVBの変数として管理されて いないため、NothingをSetして明示的に解放する事ができません。 そのため、Excelのプロセスが生き残ってしまう事になります。 http://www.interq.or.jp/www-user/komurak/progtec/030.htm http://www.bcap.co.jp/hanafusa/VBHLP/caution.htm
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.