掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ExcelオブジェクトからプロセスIDを取得するには? (ID:83880)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
魔界の仮面弁士さま たびたびご回答ありがとうございます. > 『起動されたオブジェクトはクライアントから切断されました。』 > というオートメーションエラーとなります。 > これは、Quitメソッド実行時だけでなく、ユーザー操作などにより、 > IEが閉じられた場合にも、同様の結果となります。 (Excelの場合もこのようなエラーメッセージが出力されました.) ということは,Quitしたオブジェクトに対して何らかのアクションを起こそうとした場合に発生すると考えてよいのでしょうか. 私は「何も参照していないオブジェクトに対して何らかのアクションを起こした場合に発生するエラー」と解釈していました. ---------------- なぜこの疑問が発生したか説明がうまく出来ませんので, 処理内容を説明して理解していただけたらよいのですが. 今回作成した内容は 1.Excelを起動しマクロを実行させ実行結果ファイルを作成 (1プロセス) 2.実行結果ファイルを表示(ファイルの多重起動可能) (1プロセス) という処理を順に行います. 1.では処理概要どおりの作業を行い,(新規にExcelオブジェクトを作成) 最後にQuit,シートオブジェクトの解放,ワークブックオブジェクトの解放,アプリケーションの解放を行います. 2.の処理内容は Excelアプリケーションが起動していたら,そのアプリケーションにワークブックを追加する.(GetObject) Excelアプリケーションが起動していなければ,アプリケーションを作成しワークブックを追加する.(GetObjectでエラー発生→CreateObject) ということをまず行っています. この際,1.で終了したはずのオブジェクトが残っていたため, 2.ではGetObjectでエラーが発生せず,新しいオブジェクトが作成されないため,上記のオートメーションエラーが発生しました.(言い方が正しくないかもしれませんが) このオートメーションエラーは時々おこり, メモリ上に展開されるとほぼ2・3分の1のタイミングでおきました. そして回避方法として イ.FindWindowでウィンドウハンドルを取得 ロ.GetWindowThreadProcessIdでスレッドIDを取得 ハ.スレッドIDが"0"になるまでロを繰り返す という処理を行い,プロセスが終了したことを確認し, 2の処理を行うようにしました. (内部的な仕組みが理解で来ていないため) 一応(仕様として)動作はしているものができました. が,こういった処理を行わなくてもうまく対処できるのでしょうか. ちなみに以下の方法も考えましたが,状況は変わりませんでした. ・アプリケーションの終了コードの確認 ・起動が終了するまで待つ コーディングの問題かもしれません.(再レビューしてみます) 長々申し訳ありませんでした. 以上です.
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.