KB紹介:Excelが終了してくれない。
2005/02/11
この文書はVisual Studio 2003(.NET1.1)時点をベースに記述されています。
.NETアプリケーションからExcelを操作しているんですが、Excelが終了してくれません。
よく掲示板でこのようなQAが上がります。
Excelはマネージドになっていない旧来型のCOMというタイプで、このCOMと言うものを.NETで利用する場合には変数を参照し終わったら明示的に開放してやら無いといけません。
具体的になにをするかというと、
- MarshalReleaseComObjectで変数に対して参照終わりのマークをつける。
- 変数に対してnull(Nothing)を代入する
[PRB] Visual Studio .NET クライアントで自動化した Office アプリケーションが終了しない
http://support.microsoft.com/kb/317109/ja
ただしこれを見ても大概解決しません。それは何故か。Excelの暗黙の参照が存在するからです。
たとえば以下のコードを見てください。
Dim oApp As New Excel.Application() Dim oBooks As Excel.Workbooks = oApp.Workbooks Dim oBook As Excel.Workbook = oBooks.Add
これはよい例です。(KBに載っているやり方。)
Dim oApp As New Excel.Application() Dim oBook As Excel.Workbook = oApp.Workbooks.Add
これが悪い例、Workbooksオブジェクトが暗黙で参照されています。
暗黙に参照してしまうとReleaseComObjectを呼び出す機会を失ってしまうので、永久にExcelを消すことが出来なくなります。
参考になりそうなリンクを張っておきます。
.NETからExcelの基本的な操作方法
http://www.bcap.co.jp/hanafusa/dotnet/Excelflm.htm
■ Excelのプロセスを終了する方法は??
http://homepage1.nifty.com/MADIA/vb/vb_bbs2/200408_04080020.html