エクセルのプロセス終了について このままでは、プロセスが残ってしまいます。vb2005です。ご教授願います。
エクセルのプロセス終了について このままでは、プロセスが残ってしまいます。vb2005です。ご教授願います。 シート"sample"をコピーして、同じブックに"まとめ12月"として、追加したいのです。 よろしくお願いします。 Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet '--------------------- ' EXCELファイルを開く '--------------------- Dim strFilename As String 'ファイル名(フルパス) strFilename = "C:\WORK\SAMPLE.XLS" 'ファイル名をセット Dim strSheetName As String 'シート名 strSheetName = "sample" 'シート名をセット xlApp = CreateObject("Excel.Application") 'Application生成 xlApp.Workbooks.Open(Filename:=strFilename, UpdateLinks:=0) 'EXCELを開く xlApp.Visible = True 'EXCELの表示 xlBook = xlApp.Workbooks(Dir(strFilename)) 'Workbook xlSheet = xlBook.Worksheets(strSheetName) 'Worksheet xlSheet.Activate() 'シートをアクティブにする xlBook.Worksheets("sample").Activate() 'シートをアクティブにする 'シートのコピーを、シート(sample) の前に挿入する xlSheet.Copy(Before:=xlBook.Worksheets("sample")) xlBook.ActiveSheet.Name = "まとめ12月" '================================================================== '終了処理 '保存時の問合せを非表示に設定転載禁止 xlApp.DisplayAlerts = False 'Worksheet を名前をつけて保存します転載禁止 xlSheet.SaveAs(strFilename) 'オブジェクトを解放します xlSheet = Nothing xlBook.Close() 'Book を閉じる xlBook = Nothing xlApp.Quit() 'Quit メソッドを使って Excel を終了します。 xlApp = Nothing
Visual Basic・5,615閲覧・50
ベストアンサー
COM を解放するには Marshal.ReleaseComObject メソッドを使う必要があります。.NET 側の xlApp などの変数に Nothing を代入すると、.NET 側のラッパーオブジェクトの参照カウンタは減りますが、COM の参照カウンタは減らないので、意味がありません。 はっきりいって相当面倒ですが、すべての参照を必ず変数に入れて ReleaseComObject に渡すしかありません。暗黙の参照をしている箇所は全て修正が必要です。例えば xlApp.Workbooks.Open(Filename:=strFilename, UpdateLinks:=0) このようになコードを書くと、暗黙的に参照された xlApp.Workbooks を解放する機会がなくなります。必ず、 Dim xlBooks As Excel.Workbooks = xlApp.Workbooks xlBooks.Open(Filename:=strFilename, UpdateLinks:=0) のような呼び方をして、最後に xlBooks を ReleaseComObject に渡します。基本的に . が2個続いたらアウトだと思ってください。 Marshal.ReleaseComObject(xlBooks) このようにして、すべての参照を正しく解放するようにしてください。そうすればプロセスは残らないはずです。 .NET で COM を使うときは相当慎重になる必要があります。この手の問題は ReleaseComObject で検索すれば山ほど情報が出てきます。 [参考] http://jeanne.wankuma.com/tips/vb.net/programming/releasecom.html
質問者からのお礼コメント
できました!ありがとうございます。
お礼日時:2008/11/19 13:55