Hey guys,

My program is fairly simple. Data is put into a worksheet, and a series of pivot tables and charts are created off it. For whatever reason, the Excel instance created is not killing itself. I have gone through pretty much every tutorial I can get my hands on and have no idea why this is not properly closing. Could a fresh pair of eyes have a quick look and help me out? Thanks.

Code:
Public Sub saveExcelFile(ByVal path As String)

      'excluded code to query database

        Dim app As excel.Application
        Dim wb As excel.Workbook
        Dim sheet As excel.Worksheet
        Dim range As excel.Range

        MsgBox("Creating Excel Instances")
        'start new excel application
        app = New excel.Application

        'set some settings
        app.DisplayAlerts = False

        'get new workbook
        wb = app.Workbooks.Add

        'get active sheet
        sheet = DirectCast(wb.ActiveSheet, excel.Worksheet)
        sheet.Name = "Data Extract"

        MsgBox("Finished Creating Instances")
        Dim objArray(ResultTable.Rows.Count + 1, ResultTable.Columns.Count)

        For i = 0 To ResultTable.Columns.Count - 1
            objArray(0, i) = ResultTable.Columns(i).ColumnName.ToString
        Next

        Dim iRow As Integer = 1
        Dim iCol As Integer = 0

        MsgBox("Copying Data")
        For i = 0 To ResultTable.Rows.Count - 1
            For j = 0 To ResultTable.Columns.Count - 1
                objArray(i + 1, j) = ResultTable.Rows(i).Item(j).ToString
            Next
        Next

        MsgBox("Finished Copying Data")
        MsgBox("Writing To Spreadsheet")
        range = sheet.UsedRange
        range = range.Resize(ResultTable.Rows.Count + 1, ResultTable.Columns.Count)

        range.Value = objArray
        range = sheet.UsedRange
        range.EntireColumn.AutoFit()
        MsgBox("Finished Writing To Spreadsheet")

        Dim PivotSheet As excel.Worksheet
        PivotSheet = wb.Sheets.Add()
        PivotSheet.Name = "Cluster Pivot"

        Dim destRange As excel.Range = PivotSheet.UsedRange
        Dim PT1 As excel.PivotTable


        PT1 = PivotSheet.PivotTableWizard(excel.XlPivotTableSourceType.xlDatabase, range, destRange)

        PT1.PivotFields("Cluster").orientation = excel.XlPivotFieldOrientation.xlRowField
        PT1.AddDataField(PT1.PivotFields("Status"), "Count of Status", excel.XlConsolidationFunction.xlCount)
        PT1.PivotFields("Status").orientation = excel.XlPivotFieldOrientation.xlColumnField
        PT1.PivotFields("Status").pivotitems("5. Not InScope").visible = False
        PT1.PivotFields("Cluster").pivotitems("Not Found").visible = False

        Dim ChartSheet As excel.Worksheet
        ChartSheet = wb.Sheets.Add
        ChartSheet.Name = "Cluster Chart"

        Dim chartpage As excel.Chart
        Dim xlcharts As excel.ChartObjects
        Dim mychart As excel.ChartObject
        Dim chartrange As excel.Range = PivotSheet.UsedRange

        xlcharts = ChartSheet.ChartObjects

        mychart = xlcharts.Add(10, 80, 1000, 500)

        chartpage = mychart.Chart
        chartpage.SetSourceData(chartrange)

        chartpage.ChartType = excel.XlChartType.xlBarStacked100
        chartpage.Legend.Position = excel.XlLegendPosition.xlLegendPositionBottom
        chartpage.ApplyDataLabels(excel.XlDataLabelsType.xlDataLabelsShowValue)
        chartpage.ChartArea.Font.Size = 15


        For i = 1 To chartpage.SeriesCollection.count
            Select Case i
                Case 1
                    chartpage.SeriesCollection(i).interior.color = RGB(127, 255, 0)
                Case 2
                    chartpage.SeriesCollection(i).interior.color = RGB(255, 255, 0)
                Case 3
                    chartpage.SeriesCollection(i).interior.color = RGB(255, 165, 0)
                Case 4
                    chartpage.SeriesCollection(i).interior.color = RGB(255, 0, 0)
                Case Else
                    chartpage.SeriesCollection(i).interior.color = RGB(255, 255, 255)
            End Select
            chartpage.SeriesCollection(i).border.color = RGB(0, 0, 0)
            chartpage.SeriesCollection(i).border.weight = excel.XlBorderWeight.xlThin
        Next


        wb.SaveAs(path)
        wb.Close()
        wb = Nothing
        app.Quit()
        MsgBox("Finished")



        releaseObject(chartrange)
        releaseObject(destRange)
        releaseObject(range)
        releaseObject(mychart)
        releaseObject(xlcharts)
        releaseObject(PT1)
        releaseObject(chartpage)
        releaseObject(ChartSheet)
        releaseObject(PivotSheet)
        releaseObject(sheet)
        releaseObject(wb)
        releaseObject(app)
  
        MsgBox("Finished Release")

end sub

 Public Sub releaseObject(ByVal obj As Object)
        Try
            While System.Runtime.InteropServices.Marshal.FinalReleaseComObject(obj) > 0
            End While
                obj = Nothing
        Catch ex As Exception
            obj = Nothing
        Finally
            GC.Collect()
            GC.WaitForPendingFinalizers()
            GC.Collect()
            GC.WaitForPendingFinalizers()

        End Try
    End Sub
Thanks alot