タイトル : 再び Excelのプロセスが残る問題 投稿日 : 2005/03/23(Wed) 17:57 投稿者 : 匿名
[OSのVer]:WindowsXp [VBのVer]:VB.NET2003 再度、Excelのプロセスが残る問題で悩んでいます。 新規プロジェクトを立ち上げ、フォームにボタンを1つ貼り、 魔界の仮面弁士さん(No1490)に教えてもらったソースをコピペすると 処理が終わったときにExcelのリソースは残っていません。 PIA は設定してあります。 が、問題は以下のソースです。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Ex2003 As Microsoft.Office.Interop.Excel.Application Dim Books As Microsoft.Office.Interop.Excel.Workbooks Dim Book As Microsoft.Office.Interop.Excel.Workbook Dim Sheets As Microsoft.Office.Interop.Excel.Sheets Dim Sheet As Microsoft.Office.Interop.Excel.Worksheet Dim R1, R2, R3, R4 As Microsoft.Office.Interop.Excel.Range Dim intRow As Integer Dim intCol As Integer Ex2003 = New Microsoft.Office.Interop.Excel.ApplicationClass Ex2003.Visible = False Ex2003.DisplayAlerts = False Books = Ex2003.Workbooks Book = Books.Add() Sheets = Book.Worksheets Sheet = DirectCast(Sheets(1), Microsoft.Office.Interop.Excel.Worksheet) R1 = Sheet.Cells 'タイトル1 R2 = DirectCast(R1(1, 1), Microsoft.Office.Interop.Excel.Range) R3 = DirectCast(R1(1, 3), Microsoft.Office.Interop.Excel.Range) R4 = Sheet.Range(R2, R3) R4.Merge() R4.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter R4.Value = "タイトル1" 'タイトル2 R2 = DirectCast(R1(1, 4), Microsoft.Office.Interop.Excel.Range) R3 = DirectCast(R1(1, 6), Microsoft.Office.Interop.Excel.Range) R4 = Sheet.Range(R2, R3) R4.Merge() R4.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter R4.Value = "タイトル2" MsgBox("終了") System.Runtime.InteropServices.Marshal.ReleaseComObject(R4) System.Runtime.InteropServices.Marshal.ReleaseComObject(R3) System.Runtime.InteropServices.Marshal.ReleaseComObject(R2) System.Runtime.InteropServices.Marshal.ReleaseComObject(R1) System.Runtime.InteropServices.Marshal.ReleaseComObject(Sheet) System.Runtime.InteropServices.Marshal.ReleaseComObject(Sheets) Book.SaveAs("C:\Documents and Settings\miyakeha\デスクトップ\Test.xls") Book.Close() System.Runtime.InteropServices.Marshal.ReleaseComObject(Book) System.Runtime.InteropServices.Marshal.ReleaseComObject(Books) Ex2003.Quit() System.Runtime.InteropServices.Marshal.ReleaseComObject(Ex2003) End Sub タイトル2の書き込み部分をコメントアウトすると「終了」のメッセージボックスで OKを押した瞬間にExcelはタスクマネージャから消えるのですが、 タイトル2の書き込みも処理を行うとフォームを閉じるタイミングでタスクマネージャから 消えるようになります。 これは何が影響しているのでしょうか? 現在、自分の方のソースではタイトルを書き込んだ後、それに続いて明細(250行、20列ほど)を 1セルづつ書き込んでいるのですがExcelのリソースが残ってしまいます。 処理に時間がかかる為、ループの場所でプログレスバーを操作しているのですが バーの操作部分(DoEvents含む)をコメントアウトするとExcelが残らなくなったりします。 状況を再現させれる簡単なソースは、これから用意させて頂きますが まずはタイトル1のみの書き込みとタイトル2までの書き込みで何が違うのか 解決できない為、質問させて頂きました。 変数を、それぞれ分けてみたり、都度、初期化してみたり試行錯誤したのですが 動作が安定しないというか、法則が見出せない状況で困っております。 |