中の技術日誌
 ホーム / 上へ

KB紹介:Excelが終了してくれない。

2005/02/11

この文書はVisual Studio 2003(.NET1.1)時点をベースに記述されています。

.NETアプリケーションからExcelを操作しているんですが、Excelが終了してくれません。

よく掲示板でこのようなQAが上がります。

Excelはマネージドになっていない旧来型のCOMというタイプで、このCOMと言うものを.NETで利用する場合には変数を参照し終わったら明示的に開放してやら無いといけません。
具体的になにをするかというと、

  1. MarshalReleaseComObjectで変数に対して参照終わりのマークをつける。
  2. 変数に対して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


勉強会: 01/12 大阪#5, 02/03 東京#4 , 02/10 大阪#6 登録受付中

中の技術日誌
コンテンツ
わんくま同盟
わんくま同盟
わんくま同盟
広告
バナー
MVP LOGO
MSMVP Visual C# Since 2004/04-2007/03
MCP LOGO
070-316
姉妹サイト
姉妹サイト:じゃんぬのC#, VB.NET 入門
じゃんぬの
C#, VB.NET 入門
検索
Google

ブログ本家
広告