dポイントプレゼントキャンペーン実施中!

VisualBasic2008で、ボタンを押すとTest.xlsを開いて閉じるという簡単なプログラムを作成しています。

ワークブックのCloseとアプリケーションのQuitをしているのも関わらず
ボタンを押す度に、タスクマネージャに『EXCEL.EXE』が増え、消えない状態です。

フォームを閉じると『EXCEL.EXE』は消えるのですが、
フォームを閉じない状態で、『EXCEL.EXE』を消すことはできないのでしょうか?
以下、コードです。
-----------------------------------------------
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim AAA As Excel.Application
Dim BBB As Excel.Workbook
Dim CCC As Excel.Worksheet

AAA = CreateObject("Excel.Application")
BBB = XL.Workbooks.Open("C:\Work\Test")
CCC = XM.Worksheets(1)

CCC = Nothing
BBB.Close(SaveChanges:=False)
BBB = Nothing
AAA.Quit()
AAA = Nothing
End Sub
-----------------------------------------------
終了処理のコードが間違っていましたらご指摘ください。
わかる方いらっしゃいましたら、是非お願い致します。

A 回答 (3件)

 今晩は。

「開放」漏れについては様々な要因がありますので
(宣言方法・開放順序・開放コードの種類、その他特別なコーディング下で発生)、
それらを1個づつ指摘されて、次にまたコード追加する度に何故か開放できない、と
ずっと苦労し続けるよりは、まずお手本コードに従って一気に「矯正」してしまう方が
今後楽ですし、理解も早いです。

 まず、宣言方法を少しミスるだけでも環境によっては突然開放できなくなりますので
http://www.hanatyan.sakura.ne.jp/
の、VB2005関係専用→Excel・Word・他(30) に書いてくださっているコードに
すべて直してみてください。MRComObjectで都度開放してください。
Close・Quitまで、このページを参考にさせていただく形が良いです。
(以前、Excelを扱うソフトで4万行以上のコードを書いたことがありますが、
このサイトの宣言・開放コードですべて開放できました^^)

→次にこの状態で
AAA = Nothing
MsgBox("終了")
End Sub
としてButton1を押し、正常に開放されていればMsgBox表示中にタスクマネージャ上から
Excel.exeが消えます。

→消えていなければ開放漏れがどこかに潜んでいますので、不要なコードを全て消して
Excel.exeが消える事を確認。
たまに、MsgBoxを「閉じれば」Excelが消える、といった現象が現れますが、
「正常開放された」と誤認識させられやすいです。MsgBox「表示中」に消えるのが正常です。

注意するのが、開放ミスしているコードでも正常にExcelが消えてくれる事が
ある、という事です。一度でも消えなければ、どこかに開放ミスがあると睨んでよいです。

→消えるようになれば、数行づつコードを書き足していきExcelが消えていることを
都度確認してください。消えなくなった時点でその部分が開放ミスだと分かりますので、
今後自分で「特別環境下・稀な形での開放漏れ」の検出ができるようになります。

 あとこのような癖をつけておけば、上記「その他特別なコーディング下で発生」するような
開放ミスについても悩まずにクリア出来るようになります。
(自分の場合、上記が全て1から手探りでしたので散々苦労しましたが。。。)


 少しでもお役に立てば幸いです。
 どうぞ頑張ってください ^^b
    • good
    • 0

CloseするからQuiteが処理されないのです。

    • good
    • 0
この回答へのお礼

どういうことでしょうか?
具体的にご指摘くださりますでしょうか?

お礼日時:2011/04/13 22:17

これはかなり有名な話ですね。


適当なキーワードで検索しても分かったはずですが?
http://hanatyan.sakura.ne.jp/dotnet/Excel08.htm
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!