プログラムの実行後にExcelインスタンスを削除するためのヒントをここで探しましたが、どの提案も機能していないようです。最初に実行すると、Excelのインスタンスが作成されますが、プログラムの実行中にボタンをクリックしてこのコードを再実行します。Excelの別のインスタンスを作成しますが、今回は作成したインスタンスを削除し、プログラムが最初に実行されたときに作成されたインスタンスのみを残します。
私がコードのために持っているのはこれまでのところこれです: (2012年9月14日時点で更新されたコード)
Private Sub GetBatchFileContents()
Dim xlApp As Excel.Application
Dim xlWB As Excel.Workbook
Dim xlWS As Excel.Worksheet
Dim xlRan As Excel.Range
Dim xlVal(,) As Object
Dim lastRow As Int32
xlApp = New Excel.Application()
xlWB = xlApp.Workbooks.Open(TextBox1.Text.ToString(), _
Type.Missing, _
Type.Missing, _
Type.Missing, _
Type.Missing, _
Type.Missing, _
Type.Missing, _
Type.Missing, _
Type.Missing, _
Type.Missing, _
Type.Missing, _
Type.Missing, _
Type.Missing, _
Type.Missing, _
Type.Missing)
xlWS = xlWB.Worksheets.Item(1)
lastRow = xlWS.Cells(xlWS.Rows.Count, 1).End(Excel.XlDirection.xlUp).Row
xlRan = xlWS.Range(xlWS.Cells(1, 1), xlWS.Cells(lastRow, 130))
xlVal = xlRan.Value2()
ReleaseObj(xlRan)
ReleaseObj(xlWS)
xlWB.Close(False, Type.Missing, Type.Missing)
ReleaseObj(xlWB)
xlApp.Quit()
ReleaseObj(xlApp)
End Sub
Private Sub ReleaseObj(ByRef obj As Object)
Try
Marshal.FinalReleaseComObject(obj)
Catch ex As Exception
Stop
Finally
obj = Nothing
End Try
GC.Collect()
GC.WaitForPendingFinalizers()
GC.Collect()
End Sub
フィードバックをよろしくお願いします!