Hola, estoy intentando actualizar desde VB.Net una hoja excel con un BackGroundWorker con una barra de progreso que indique en qué momento está dicho proceso y no hay manera de que me funcione.
¿Puede alguien pasarme un código de ejemplo para orientarme o decirme que es lo que tengo mal? Gracias.
Código:
Public Sub New()

        InitializeComponent()
        BackgroundWorker1.WorkerReportsProgress = True
        BackgroundWorker1.WorkerSupportsCancellation = False

    End Sub

    Sub worker_Dowork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs)

        'REALIZAMOS EL PROCESO EN SEGUNDO PLANO. ACTUALIZANDO LA HOJA EXCEL

        pbCalculationProgress.Visible = True

        Dim anio As String = CStr(Now.Year) 'EXTRAEMOS EL AÑO DE LA FECHA ACTUAL
            Dim comienzo As DateTime = DateTime.Now
        e.Result = ""

        'OPERACIÓN EN SEGUNDO PLANO

        Dim worker As BackgroundWorker = TryCast(sender, BackgroundWorker)

        For i As Integer = 1 To 10
            If worker.CancellationPending = True Then
                e.Cancel = True
                Exit For
            Else
                'System.Threading.Thread.Sleep(250)
                worker.ReportProgress(i * 10)

            End If
        Next

        BackgroundWorker1.ReportProgress(2)

        'exApp = New Excel.Application
        'exLibro = exApp.Workbooks.Open("D:\Documentos\Escaneados\Informe_medico_infarto_2019\Tensión\Historico tension.xlsx")
        'exHoja = DirectCast(exLibro.Sheets("Histórico tensión " & anio), Excel.Worksheet)

        Dim ultimaFila As Int16 = exHoja.Range("A1").End(Excel.XlDirection.xlDown).Row 'VALOR DE LA ÚLTIMA FILA CON DATOS
        Dim menorFecha As String = Format(exHoja.Range("$A$" & ultimaFila).Value, "dd/MM/yyyy") 'VALOR DE LA ÚLTIMA FECHA INSERTADA EN LA HOJA
        Dim rowIndex As Int16 = 0
        Dim primeraVacia As String = ("A" & ultimaFila + 1) 'PRIMERA FILA VACÍA

        'SELECCIONO LA PRIMERA CELDA VACÍA DESPUÉS DE LA ÚLTIMA FILA ESCRITA

        exHoja.Select()
            exHoja.Range(primeraVacia).Select()

            Dim actualizaSQL As String = "SELECT * FROM valores WHERE fecha > '" & CDate(menorFecha) & "';"

            'ESTABLECEMOS CONEXIÓN CON POSTGRES

            If conexion.State = ConnectionState.Open Then
                conexion.Close()

            Else conexion.Open()

            End If

            Dim SQLadapter As New NpgsqlDataAdapter(actualizaSQL, conexion)
        Dim ds As New DataSet
        Dim totallineas = ds.Tables(0).Select(actualizaSQL).Length

        'RELLENAMOS EL DATASET Y AÑADIMOS REGISTROS AL EXCEL

        SQLadapter.Fill(ds)

            For i = 0 To ds.Tables(0).Rows.Count - 1 'RECORREMOS LAS FILAS DEL DATASET

                For j = 0 To ds.Tables(0).Columns.Count - 1 'RECORREMOS LAS COLUMNAS DEL DATASET

                    exHoja.Cells(ultimaFila + 1, j + 1) = ds.Tables(0).Rows(i).Item(j) 'RELLENAMOS LAS CELDAS EXCEL CON LOS NUEVOS VALORES

                Next

                ultimaFila += 1

            Next

            'FORMATEAMOS, GUARDAMOS Y CERRAMOS EL EXCEL

            Dim M_Izq As Short = 63
            Dim M_Der As Short = 43
            Dim M_Sup As Short = 35
            Dim M_Inf As Short = 40

            'ORIENTACIÓN DE LA HOJA

            With exHoja.PageSetup

                .Orientation = Excel.XlPageOrientation.xlPortrait

                'CONFIGURACIÓN DE MÁRGENES

                .LeftMargin = M_Izq
                .RightMargin = M_Der
                .TopMargin = M_Sup
                .BottomMargin = M_Inf

            End With

            'TÍTULO EN NEGRITA, ALINEADO AL CENTRO DE LAS CELDAS Y COLOR

            Dim objRango As Excel.Range = exHoja.Range(exHoja.Cells(1, 1), exHoja.Cells(exHoja.UsedRange.Rows.Count, exHoja.UsedRange.Columns.Count))
            Dim contador As Integer = exHoja.Rows.Count

            exHoja.PageSetup.PrintTitleRows = exHoja.Rows(1).Address 'PONEMOS LA FILA DE ENCABEZADO EN TODAS LAS HOJAS IMPRESAS
            exHoja.PageSetup.PaperSize = Excel.XlPaperSize.xlPaperA4 'TAMAÑO DE PAPEL A4

            exHoja.Rows.Item(1).Font.Bold = 1 'NEGRITA
            exHoja.Rows.Item(1).Font.ColorIndex = 49 'COLOR DEL ENCABEZADO
            exHoja.Rows.Item(1).HorizontalAlignment = 3 'ALINEADO DEL ENCABEZADO

            objRango.Borders.LineStyle = 1 'BORDES DE LA HOJA
            objRango.HorizontalAlignment = 3 'ALINEADO DE LAS COLUMNAS

            exHoja.Rows.Font.Size = 12 ' TAMAÑO DE LA FUENTE
            exHoja.Rows.Font.Name = "Adobe Garamond Pro Bold" 'TIPO DE FUENTE

            exHoja.Columns.AutoFit() 'AJUSTE DE LAS COLUMNAS

            exHoja.Range("A2:A367").Font.ColorIndex = 5 'COLOR DE LA FUENTE DE LA COLUMNA DE FECHAS
            exHoja.Range("A2:A367").Interior.Color = Color.White 'COLOR DEL FONDO DE LA COLUMNA FECHAS
            exHoja.Range("A2:A367").NumberFormat = "dd/mm/yyyy"


            'DAMOS FORMATO CONDICIONAL A LAS CELDAS
            'FORMATO A COLUMNA DE FECHA

            Dim NCol As Short = DataGridView1.ColumnCount
            Dim NRow As Short = DataGridView1.RowCount

        For Fila As Short = 2 To NRow + 1

            For Col As Short = 2 To NCol

                Dim FC As String = Chr(64 + Col) & Fila

                exHoja.Range(FC).Select()
                exHoja.Range(FC).Font.ColorIndex = 1
                exHoja.Range(FC).Font.Bold = True

            Next

        Next

        'FORMATO A COLUMNA SISTÓLICA

        For Fila As Short = 2 To NRow + 1

                For Col As Short = 2 To NCol - 3

                    Dim FC As String = Chr(64 + Col) & Fila

                    exHoja.Range(FC).Select()

                    If exHoja.Range(FC).Value >= 15 Or exHoja.Range(FC).Value <= 11 Then

                        exHoja.Range(FC).Font.ColorIndex = 3
                        exHoja.Range(FC).Font.Bold = True

                    End If

                Next

            Next

            'FORMATO A COLUMNA DIASTÓLICA

            For Fila As Short = 2 To NRow + 1

                For Col As Short = 3 To NCol - 2

                    Dim FC As String = Chr(64 + Col) & Fila

                    exHoja.Range(FC).Select()

                    If exHoja.Range(FC).Value <= 5 Or exHoja.Range(FC).Value >= 8 Then

                        exHoja.Range(FC).Font.ColorIndex = 3
                        exHoja.Range(FC).Font.Bold = True

                    End If

                Next

            Next

            'FORMATO A COLUMNA PULSACIONES

            For Fila As Short = 2 To NRow + 1

                For Col As Short = 4 To NCol - 1

                    Dim FC As String = Chr(64 + Col) & Fila

                    exHoja.Range(FC).Select()

                    If exHoja.Range(FC).Value <= 50 Or exHoja.Range(FC).Value > 75 Then

                        exHoja.Range(FC).Font.ColorIndex = 3
                        exHoja.Range(FC).Font.Bold = True

                    End If

                Next

            Next

            'FORMATO A COLUMNA SATURACIÓN

            For Fila As Short = 2 To NRow + 1

                For Col As Short = 5 To NCol

                    Dim FC As String = Chr(64 + Col) & Fila

                    exHoja.Range(FC).Select()

                    If exHoja.Range(FC).Value <= 96 Then

                        exHoja.Range(FC).Font.ColorIndex = 3
                        exHoja.Range(FC).Font.Bold = True

                    End If

                Next

            Next

            'ELIMINAMOS RESIDUOS DE VERSIONES ANTERIORES

            Dim lastRow As Integer = exHoja.Range("A370").End(Excel.XlDirection.xlUp).Row

            exHoja.Range("A" & lastRow & ":E" & lastRow).Select()
            exHoja.Range("A" & lastRow & ":E367").Clear()
            exHoja.Range("F1:N367").Select()
            exHoja.Range("F1:N367").Clear()

            'ESCRIBIMOS LAS MEDIAS DE CADA COLUMNA

            lastRow += 1

            exHoja.Cells(lastRow, 1).Select()
            exHoja.Cells(lastRow, 1).Value = "MEDIAS:  "
            exHoja.Cells(lastRow, 1).Font.Color = Color.DarkGreen
            exHoja.Cells(lastRow, 1).Font.Size = 12
            exHoja.Cells(lastRow, 1).Font.Name = "Adobe Garamond Pro Bold"
            exHoja.Cells(lastRow, 1).Interior.Color = Color.Chartreuse
            exHoja.Cells(lastRow, 1).HorizontalAlignment = 3
            exHoja.Cells(lastRow, 2).FormulaLocal = "=REDONDEAR(PROMEDIO(B2:B" & lastRow - 2 & ");2)"
            exHoja.Cells(lastRow, 2).HorizontalAlignment = 3
            exHoja.Cells(lastRow, 3).FormulaLocal = "=REDONDEAR(PROMEDIO(C2:C" & lastRow - 2 & ");2)"
            exHoja.Cells(lastRow, 3).HorizontalAlignment = 3
            exHoja.Cells(lastRow, 4).FormulaLocal = "=REDONDEAR(PROMEDIO(D2:D" & lastRow - 2 & ");0)"
            exHoja.Cells(lastRow, 4).HorizontalAlignment = 3
            exHoja.Cells(lastRow, 5).FormulaLocal = "=REDONDEAR(PROMEDIO(E2:E" & lastRow - 2 & ");0)"
            exHoja.Cells(lastRow, 5).HorizontalAlignment = 3

            exHoja.Range("A" & lastRow & ":E" & lastRow).Borders.LineStyle = 1 'BORDES DE LA HOJA
            exHoja.Range("E1").End(Excel.XlDirection.xlDown).Select() 'SELECCIONAMOS LA ÚLTIMA CELDA DE LA COLUMNA E CON DATOS

            exLibro.Save()
            exLibro.Close()
            exApp.Quit()

            conexion.Close()

            ' LIMPIAMOS TODOS LOS PROCESOS DE EXCEL ABIERTOS DE LA MEMORIA

            Dim P As System.Diagnostics.Process

            Try

                For Each P In System.Diagnostics.Process.GetProcesses

                    If P.ProcessName.ToUpper Like "*EXCEL*" Then

                        P.Kill()

                    End If

                Next

            Catch

            End Try

            GC.WaitForPendingFinalizers()
            GC.Collect()

            conexion.Close()

            Dim duracion As TimeSpan = DateTime.Now - comienzo

            e.Result = "DURACIÓN: " & duracion.TotalSeconds.ToString() & " SEGUNDOS."

    End Sub

    Sub worker_ProgressChanged(ByVal sender As System.Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs)

        'AQUÍ ACTUALIZAMOS LA BARRA DE PROGRESODE LA OPERACIÓN

        pbCalculationProgress.Value = e.ProgressPercentage
        percent_lbl.Text = (e.ProgressPercentage.ToString() & "%")

    End Sub

    Sub worker_RunWorkerCompleted(sender As System.Object, e As System.ComponentModel.RunWorkerCompletedEventArgs)

        'AQUÍ MOSTRAMOS QUE EL PROCESO ESTÁ ACABADO

        Dim Message As String = "OK, HOJA EXCEL ACTUALIZADA CON ÉXITO."
        Dim Caption As String = " ACTUALIZACIÓN "
        Dim Icono As MessageBoxIcon = MessageBoxIcon.Information
        Dim Buttons As MessageBoxButtons = MessageBoxButtons.OK

        Dim Resultado As DialogResult

        'MOSTRAMOS EL MESSAGEBOX

        Resultado = MessageBox.Show(Message, Caption, Buttons, Icono)

        pbCalculationProgress.Value = 0

    End Sub