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 original
Private 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.