アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります。
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 xlsbooks As Excel.Workbooks = Nothing
Dim xlsbook As Excel.Workbook = Nothing
Dim xlsSheets As Excel.Sheets = Nothing
Dim xlsSheet As Excel.Worksheet = Nothing
Dim xlsRange As Excel.Range = Nothing
Dim xlsValidation As Excel.Validation = Nothing

Try

xlsApp = New Excel.Application()
xlsApp.Visible = False
xlsbooks = xlsApp.Workbooks
xlsbook = xlsbooks.Open(strWeeklyReportPath)
xlsSheets = xlsbook.Worksheets
xlsSheet = DirectCast(xlsSheets(1), Excel.Worksheet)


xlsRange = xlsSheet.Range("B2")
xlsRange.Validation.Add(Excel.XlDVType.xlValidateList, Formula1:="東京、大阪、名古屋")
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsRange)

Finally

If xlsValidation IsNot Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsValidation)
End If
If xlsRange IsNot Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsRange)
End If
If xlsSheet IsNot Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsSheet)
End If
If xlsSheets IsNot Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsSheets)
End If
If xlsbook IsNot Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsbook)
End If
If xlsbooks IsNot Nothing Then
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsbooks)
End If
If xlsApp IsNot Nothing Then
xlsApp.Quit()
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsApp)
End If
GC.Collect()

End Try

ご教示いただけますようお願い申し上げます。
以上宜しくお願い申し上げます。

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

  • ご回答ありがとうございます。申し訳ございませんが、具体的にどのようなコードかご教示いただけますでしょうか。
    直後にSystem.Runtime.InteropServices.Marshal.ReleaseComObject(xlsRange.Validation)を入れてみましたが、解放されませんでした。またSystem.Runtime.InteropServices.Marshal.ReleaseComObject(Validation)ではエラーになってしまいます。
    恐れ入りますが、宜しくお願い申し上げます。

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

A 回答 (3件)

> ご回答ありがとうございます。

申し訳ございませんが、具体的にどのようなコードかご教示いただけますでしょうか。

xlsRange.Validation.Add(Excel.XlDVType.xlValidateList, Formula1:="東京、大阪、名古屋")
  ↓
xlsValidation = xlsRange.Validation
xlsValidation.Add(Excel.XlDVType.xlValidateList, Formula1:="東京、大阪、名古屋")
    • good
    • 1
この回答へのお礼

早速のご回答ありがとうございました。いただきましたコードで解放されることを確認しました。本当にありがとうございました。

お礼日時:2015/02/13 13:37

解放する処理をすべて無しにして実行した時に


タスクマネージャに複数のExcelが残るのなら
参照の仕方がマズイのも一因かも。
Excel.Worksheet
とか。
ご参考まで。
    • good
    • 0

> xlsRange.Validation.Add(Excel.XlDVType.xlValidateList, Formula1:="東京、大阪、名古屋")



xlsRange.Validationが解放できるような書き方に直してみてください。
この回答への補足あり
    • good
    • 0

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