tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 再び 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までの書き込みで何が違うのか
解決できない為、質問させて頂きました。
変数を、それぞれ分けてみたり、都度、初期化してみたり試行錯誤したのですが
動作が安定しないというか、法則が見出せない状況で困っております。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。