・VB.NET2003
・Excel2000
VB.NET2003でExcel2000を制御しています。
以下のようなコードを追加したところ、
プログラム終了後にExcel2000のプロセスが残るようになってしまいました。
以下のコードをコメントアウトすると、Excel2000のプロセスは残りません。
このコードに対する修正案を示してください。
http://d.hatena.ne.jp/akio0911/20070528/1180323903
Dim xlColumns As Excel.Range xlColumns = xlApplication.Columns("B:B")
こんな感じに直してください。
Dim xlColumns As Excel.Range Dim xlRange As Excel.Range xlColumns = xlApplication.Columns xlRange = xlColumns("B:B")
でxlColumnsとxlRangeの両方の開放が必要です。
----
検証コード
Dim xlApp As New Excel.Application Dim xlbooks As Excel.Workbooks = xlApp.Workbooks Dim xlbook As Excel.Workbook = xlbooks.Add Dim xlSheet As Excel.Worksheet = xlbook.ActiveSheet Dim xlColumns As Excel.Range = xlSheet.Columns Dim xlRange As Excel.Range = xlColumns("B:B") xlRange.ColumnWidth = 9 xlbook.Close(False) ' 保存しないで閉じる xlApp.Quit() System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRange) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlColumns) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlbook) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlbooks) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)
こちらが参考になるのではないでしょうか。
面倒なのは、ReleaseComObject メソッドを実行するために、参照したものをすべて変数へ格納しておく必要があるという点です。
コードに対する修正案を示してください。
Dim xlColumns As Excel.Range xlColumns = xlApplication.Columns("B:B")
こんな感じに直してください。
Dim xlColumns As Excel.Range Dim xlRange As Excel.Range xlColumns = xlApplication.Columns xlRange = xlColumns("B:B")
でxlColumnsとxlRangeの両方の開放が必要です。
----
検証コード
Dim xlApp As New Excel.Application Dim xlbooks As Excel.Workbooks = xlApp.Workbooks Dim xlbook As Excel.Workbook = xlbooks.Add Dim xlSheet As Excel.Worksheet = xlbook.ActiveSheet Dim xlColumns As Excel.Range = xlSheet.Columns Dim xlRange As Excel.Range = xlColumns("B:B") xlRange.ColumnWidth = 9 xlbook.Close(False) ' 保存しないで閉じる xlApp.Quit() System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRange) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlColumns) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlSheet) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlbook) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlbooks) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)
問題が解消されました。
ありがとうございました。
問題が解消されました。
ありがとうございました。