プロが教えるわが家の防犯対策術!

お世話になります。
vb.net2010で、Windows8.1上のexcel2013を操作するアプリケーションを開発しております。

以下のコードを実行後、EXCELのプロセスが残ってしまい、原因がわかならい状態です。
恐れ入りますが、何が原因かおわかりになる方はご教示いただけないでしょうか。

参照内容は以下になります。
参照名:Microsoft.Office.Interop.Excel
種類:.NET
バージョン:14.0.0.0

コードは以下になります。

Imports Microsoft.Office.Interop

Dim xlsApp As Excel.Application = Nothing
Dim xlsWookBook As Excel.Workbook = Nothing
Dim aRange As Excel.Range = Nothing

Try

xlsApp = New Excel.Application()
xlsApp.Visible = False
xlsWookBook = xlsApp.Workbooks.Open(strPath)
DirectCast(xlsWookBook.Sheets(1), Excel.Worksheet).Select()

aRange = xlsApp.Range("B5")
aRange.Value2 = "AAA"

aRange = xlsApp.Range("I4")
aRange.Value2 = "BBB"

Finally

If aRange IsNot Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(aRange)
End If
If xlsWookBook IsNot Nothing Then
xlsWookBook.Save()
xlsWookBook.Close()
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsWookBook)
End If
If xlsApp IsNot Nothing Then
xlsApp.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsApp)
End If
GC.Collect()

End Try

以上宜しくお願い申し上げます。

質問者からの補足コメント

  • 早速のご回答誠にありがとうございます。xlsApp.Workbooksの解放を試してみましたが、私の記述したコードでは現象は改善されませんでした。FINALYにどのようなコードを入れたらよいかご教示いただけますでしょうか。力量不足で申し訳ございませんが、何卒宜しくお願い申し上げます。

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/02/11 14:50

A 回答 (1件)

すべてのメンバーアクセスによって取得されるCOMオブジェクトは解放する必要があります。


プロパティやインデクサから取得する場合でもこれは例外ではないです。
例えば,
> xlsWookBook = xlsApp.Workbooks.Open(strPath)
は,xlsApp.Workbooksを最後に解放できるように書く必要があります。


なお,.xlsx形式であれば,OOXMLとして読み書きした方が楽な場合も多いです。
nugetでEPPlusなどをインストールしてしまえば,COMの場合とそれほど代わらない書き方ができますし。
この回答への補足あり
    • good
    • 0
この回答へのお礼

その後色々試してみましたが、結果Rangeの解放が出来ておりませんでした。解決しましたのでご報告申し上げます。ありがとうございました。

お礼日時:2015/02/12 23:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!