Buen día a todos,
De nueva cuenta dando lata por aquí.
Les expongo mi caso a ver si alguien me puede ayudar.
Estoy generando una aplicación en excel desde Visual Studio 2010, es decir estoy automatizando excel pero desde visual (No VBA).
Tengo un backgroundworker que me hace una consulta a una base de datos y una vez que tiene los datos los coloco en una hoja de excel, al mismo tiempo tengo un formulario con dos barras de progreso en una de ellas tengo el progreso general y la otra la uso para la espera y para mostrar el avance de carga de datos.
Originalmente la barra de progreso esta declarada como marquee y posterior a eso, por medio de código le paso a continuous para poder desplegar el avance de carga.
El problema está en que al terminar de hacer la carga (y dicho sea de paso, sin que se llene completamente la barra) excel me dice que encontró un problema y que se va a cerrar.
Probé por barradeprogreso.disposed() y no me marca error, pero me quita la barra del formulario, cosa que no quiero pues necesito usarlo para una segunda consulta que se hace en el mismo proceso.
Este es el código que estoy usando:
Código vb:
Ver originalPrivate Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Try
Control.CheckForIllegalCrossThreadCalls = False
BackgroundWorker1.ReportProgress(10)
If Not conn.getData(variables.user, variables.password) Then
BackgroundWorker1.CancelAsync()
Exit Sub
End If
BackgroundWorker1.ReportProgress(20)
Dim xlApp As Excel.Application = New Excel.Application
xlApp.ScreenUpdating = False
Dim INCData As Excel.Worksheet = CType(Globals.ThisWorkbook.Sheets(2), Excel.Worksheet)
xlFila = 2
xlColumna = 1
With INCData
.Activate()
.Range(.Range("A2"), .Range("S2").End(Excel.XlDirection.xlDown)).Clear()
numReg = UBound(conn.Rs.GetRows(), 2) + 1
conn.Rs.MoveFirst()
MsgBox(numReg)
waitBar.Style = ProgressBarStyle.Continuous
waitBar.Maximum = numReg
contador = 1
While Not conn.Rs.EOF
xlColumna = 1
For i = 0 To conn.Rs.Fields.Count - 1
.Cells(xlFila, xlColumna) = conn.Rs(i).Value
xlColumna = xlColumna + 1
Next i
xlFila = xlFila + 1
conn.Rs.MoveNext()
contador = contador + 1
If contador < numReg Then
waitBar.Value = contador + 1
Else
waitBar.Value = numReg
End If
porcentajeLabel.Text = CType(waitBar.Value * 100 / waitBar.Maximum, Integer) & "%"
End While
End With
waitBar.Value = 0
contador = 1
waitBar.Maximum = 100
waitBar.Style = ProgressBarStyle.Marquee
waitBar.MarqueeAnimationSpeed = 200
porcentajeLabel.Text = "Consultando..."
xlApp.ScreenUpdating = True
'conn.loadData("INC")
Catch exep As Exception
MsgBox(exep.Message)
Exit Sub
End Try
End Sub
Tal como está el código en este momento, lo que hace es que excel se queda colgado y necesito cerrarlo desde el administrador de tareas, sin que termine el proceso.
Espero me puedan ayudar.
Saludos,
Erick.