- ベストアンサー
.NETでエクセル解放がうまくいかない理由と解決方法
- Excelを解放する際に発生する問題とその解決方法について説明します。
- エクセル解放時に発生するエラーの原因と対処法を解説します。
- .NETでエクセルを解放する方法についての詳しい説明をします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは、 私も、エクセルのオブジェクトの解放の問題になったときに 紹介されたページ http://hanatyan.sakura.ne.jp/dotnet/index.html 花ちゃん、コード見ると、このページにもたどり着いた様に 見受けられますが。 このページと、camputerさんのコードを見て 気づいた点として、 Dim xlSheets As Excel.Sheets = xlBook.Worksheets (注意)Sheetも宣言しますが、Sheetsも宣言しています。 がないですね。 そのせいか、 xlSheetsの表現が、WB.Worksheets に変わっています。 花ちゃんでは、 花ちゃんから、転載**************** 1.基本的に、下記のように、[.]が2つ連続で使用されたら解放できません。 誤り xlRange = xlCells(1,1) xlRange.Interior.Color = RGB(0, 255, 0) '使った変数の解放処理(.NETからExcelの基本的な操作方法 参照の事) MRComObject(xlCells) MRComObject(xlRange) 正 xlRange = xlCells(1, 1) Dim xlInterior As Excel.Interior xlInterior = xlRange.Interior xlInterior.Color = RGB(0, 255, 0) MRComObject(xlInterior) MRComObject(xlCells) MRComObject(xlRange) 必ず、上記のように分解して変数に受けて、解放処理をして下さい。 ***************************************転載終了 WB.Worksheets.Countの表現を使っていますが。 花ちゃんからの転載に書いてある。[.]が2つ連続で使用されています。 ここは、WB.WorksheetsをxlSheetsで受けて、 xlSheets.Countに変えたほうが、良い様な気がします。 とうぜん、xlSheetsを、使っているので、他にもこれ用にコードを 変更しないと、いけないかも知れませんが。 後は、気がついた点は、ないです。 外していたら、ごめん。
お礼
どうもありがとうございます. 分かりにくくてもうしわけございませ. 'For N_s = 1 To WB.Worksheets.Count のほうはコメントアウトしております. For Each xlSheet In WB.Worksheets が実行文になります. しかしtom11様のご指摘で Dim xlSheet As Excel.Worksheetではなく Dim xlSheet As Excel.Worksheetsにしたところ 正常に解放されるようになりました.ご指摘どうもありがとうございました. 今からExcel.WorksheetとExcel.Worksheetsについて勉強してみます. ほんとうにどうもありがとうございました.