title: VB.NET Releasing Excel file after reading so it can be overwritten
body: <p>I am having the same issue that many before me have had, and I have found several threads on the issue but my application of their fixes have not yielded any change. </p>
  
  <p>I am reading an excel file and populating a DataGridView with it. Very simply the user can modify it and then save it. The problem, like the other threads, is that the program has such a tight grip on the file I can't overwrite it. </p>
  
  <p>Among the many fixes offered, Garbage Collection was the most frequently mentioned, but my results are unchanged. I have tried disposing of the OLEDB connection, commands, adapters and datasets also without success.</p>
  
  <p>I've been running through several different examples and tutorials to write this program and so if these fixes are required, I've obviously implemented them in the wrong spot. </p>
  
  <p>Here is the reading block which happens on the form load (I've removed all my attempts to fix it to unclutter the code):</p>
  
  <pre><code>Private Sub Inventory_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  
      Using MyConnection = New System.Data.OleDb.OleDbConnection("provider=Microsoft.Jet.OLEDB.4.0;Data Source='c:\AllTrade\Inventory.xlsx';Extended Properties=Excel 8.0;")
          Using MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [InventorySheet$]", MyConnection)
              DtSet = New System.Data.DataSet
              MyCommand.Fill(DtSet)
              InventoryGridView.DataSource = DtSet.Tables(0)
              MyConnection.Close()
          End Using
      End Using
  End Sub
  </code></pre>
  
  <p>Here is the saving block (This is the code that generates the "File in Use" error):</p>
  
  <pre><code>Private Sub UpdateInventory_Click(sender As Object, e As EventArgs) Handles UpdateInventory.Click
  
      Dim ExcelApp As New Excel.Application()
      ExcelApp.Application.Workbooks.Add(Type.Missing)
  
      For i As Integer = 0 To InventoryGridView.Rows.Count - 1
          Dim row As DataGridViewRow = InventoryGridView.Rows(i)
          For j As Integer = 0 To row.Cells.Count - 1
              ExcelApp.Cells(i + 1, j + 1) = row.Cells(j).Value
          Next
      Next
  
      ExcelApp.ActiveWorkbook.SaveAs("C:\Alltrade\Inventory.xlsx")
      ExcelApp.ActiveWorkbook.Saved = True
      ExcelApp.Quit()
  
  End Sub
  </code></pre>
  
  <p>What's the trick to let go of the file? If the <code>GC.Collect()</code> and <code>GC.WaitForPendingFinalizers()</code> are required, where would they go? </p>
  
  <p>I appreciate any help and apologize since I haven't been able to successfully implement the other answers from similar threads. </p>