- PR -

Excelのプロセス終了方法は??

投稿者投稿内容
takira
会議室デビュー日: 2003/08/18
投稿数: 1
投稿日時: 2003-08-18 13:02

>xlSheet.Application.Visible = True

こいつ外すとどうなりますか?
私もVB6.0のときに同現象で悩んだ結果
たしかApplicationプロパティを利用するとプロセスが残る現象が
発生してたように記憶しています。

遠い昔の話なので間違っていたらすみません(^^;
リックス
常連さん
会議室デビュー日: 2001/10/01
投稿数: 47
お住まい・勤務地: 東京
投稿日時: 2003-08-18 13:26
こんにちは。
わたしも、この問題には長いこと苦しめられました。

解決方法としては、

xlSheet.Application.Visible = True の後で
xlSheet.Application.ScreenUpdating = True

を試してみてください。

これは、EXCEL97以降の既知の問題のようです。

マイクロソフト サポート技術情報 - 187745
[BUG] オートメーション機能を使用していると Microsoft Excel が正しく再描画されない
http://support.microsoft.com/default.aspx?scid=kb;ja;187745


参考にしてください。
Beatle
ぬし
会議室デビュー日: 2003/06/09
投稿数: 394
投稿日時: 2003-08-18 13:44
>xlSheet.Application.Visible = True の後で
>xlSheet.Application.ScreenUpdating = True

VB6のときもそうでしたが、なんでxlsheetをいきなりVisible=Trueに
するのですかねぇ?
手順どおりなら、xlap→xlBook→xlsheetではなのかしらん?(現象とは
直接関係無いかもしれませんが)

それとVB6のときにアーリーバインド、レイトバインドともWithを使ったほうが
問題が少なかったように思うのですが...

あ、そういえば私がVB6のときこの問題に出くわしたときは確かWithEventsを
使うときれいに落ちてくれたような覚えがあります。というかExcel側で操作
されるという前提ならWithEventsのほうが良いですよ。(.netじゃ使えるのか
どうか知りませんが)
リックス
常連さん
会議室デビュー日: 2001/10/01
投稿数: 47
お住まい・勤務地: 東京
投稿日時: 2003-08-18 14:01
> 手順どおりなら、xlap→xlBook→xlsheetではなのかしらん?(現象とは
> 直接関係無いかもしれませんが)
おっしゃるとおりですが、今問題にしている部分の改善方法が分かり難くなる事から、元のコードに追加する形にしました。

ご了承ください。

確かに、OLEオートメーション/COMは循環参照などに弱いので、このあたりの理解は無用のトラブルを減らす上で重要ですね。



[ メッセージ編集済み 編集者: リックス 編集日時 2003-08-18 14:07 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-08-18 17:05
引用:

Beatleさんの書き込み (2003-08-18 13:44) より:
>xlSheet.Application.Visible = True の後で
>xlSheet.Application.ScreenUpdating = True

VB6のときもそうでしたが、なんでxlsheetをいきなりVisible=Trueに
するのですかねぇ?
手順どおりなら、xlap→xlBook→xlsheetではなのかしらん?(現象とは
直接関係無いかもしれませんが)


 手順としてsheet→book→appの順に表示しているのではなく、sheetを作成したappを、sheetから参照して表示させているのだから、かまわないのでは?


 で、元の質問はプログラムから終了させたときにエクセルのインスタンスが残る、という問題で、リックスさんの提示されたMSのページは「OLEオートメーションで起動したエクセルインスタンスを手動で終了させると(そのインスタンスが残るために)、次回起動時に正しく描画されない」という問題だと思うのですが、プログラム上で表示させてから終了させるとインスタンスが解放されるのでしょうか?
リックス
常連さん
会議室デビュー日: 2001/10/01
投稿数: 47
お住まい・勤務地: 東京
投稿日時: 2003-08-18 18:29
こんにちは。

すみません。私の方法では現象は改善しませんでした。

表面的には同じEXCELのプロセスが残留する現象だったのですが、
想定していた障害とは違っていました。

未確認で返答してしまい失礼しました。


問題の挙動を見ていると、GC絡みの問題のように感じですね。

Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-08-18 18:52
「[ASP.NET]EXCELが終了しない」
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=3343&forum=7

「やっぱりわからないGCの動作」
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=2904&forum=7

「VB.NETでEXCELが終了しない。」
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=4524&forum=7

「続Excelが終了できない」
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=3895&forum=7


 ちなみに、エクセルを起動したプログラムを終了すれば、エクセルのインスタンスも消えると思います。

[ メッセージ編集済み 編集者: Jitta 編集日時 2003-08-18 18:56 ]
takahon
会議室デビュー日: 2003/08/15
投稿数: 4
投稿日時: 2003-08-18 19:36
皆様有り難うございます。
返信が遅れ、大変申し訳ございません。
色々試している最中です・・・

引用:---------------------------------------------------------------
meiさん
SaveAsで失敗している訳じゃないですよね?
--------------------------------------------------------------------
Save無しで実行後も状況は変わりませんでした。

引用:---------------------------------------------------------------
リックスさん
xlSheet.Application.Visible = True の後で
xlSheet.Application.ScreenUpdating = True
--------------------------------------------------------------------
上記行を追加後も状況は変わりませんでした。

引用:---------------------------------------------------------------
takiraさん
xlSheet.Application.Visible = True
こいつ外すとどうなりますか?
--------------------------------------------------------------------
そうなんですよ。VB6.0でも同様の悩みがあったような・・・
上記行を削除後に実行でも状況は変わりませんでした。

引用:---------------------------------------------------------------
Jittaさん
「[ASP.NET]EXCELが終了しない」
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=3343&forum=7

おくちnさん
WebConfigに追加した
<identity impersonate="true" />
がいけなかったみたいです。

当初、EXCELオブジェクトがNEW出来なかったので、上記の一行を追加したのですが。
EXCELオブジェクトをコンポーネントサービスもしくは、DCOMCNFGでセキュリティの
起動の許可に、ASPNETユーザーを追加すればOKでした。

--------------------------------------------------------------------
申し訳ございません。過去履歴を検索しきれませんでした。
上記を試す前に、VB.NETで実行してみたところ(VB.NETは初めてですが・・)プロセス
は残っておりませんでした。「VB.NET」では成功です!
あとは、ASP.NETでどうなるか・・・・
引き続きやってみます。


スキルアップ/キャリアアップ(JOB@IT)