Programación General > Visual Basic 6.0 e inferiores
Exportar A Excel
Jeremy:
Tengo un problema a la hora de cortar un proceso. Hago una exportación desde mi programa en Visual a Excel. El problema que tengo es que cuando lo hago, se queda en memoria el excel.exe y no sé cómo hacer para cerrarlo. Esto ocaciona que sólo pueda efectuar la primera exportación a Excel, en las siguientes el Excel se queda bloqueado, y es precisamente por eso, porque el fichero excel.exe se queda en memoria.
Cuando el Excel se queda bloqueado tengo que abrir el Administrador de Tareas de Windows y terminar el excel.exe manualmente.
Adjunto el código del proceso de exportación.
--- Código: Text --- Private Sub mnuexp_Click()Dim i As LongDim n As Long lblinf.Visible = Truelblinf.Caption = "Se están exportando " & lstlib.ListItems.Count & " registros. Esta operación puede tardar unos minutos, por favor espere..."pgbar.Visible = True Screen.MousePointer = vbHourglassOn Error Resume NextSet objExcel = GetObject(, "Excel.Application")If Err.Number Then Err.Clear Set objExcel = CreateObject("Excel.Application") If Err.Number Then MsgBox "No se pudo abrir Excel" End IfEnd If Set objWorkbook = objExcel.Workbooks.Add For i = 0 To lstlib.ListItems.Count objWorkbook.ActiveSheet.Cells(i, 1).Value = lstlib.ListItems(i).Text pgbar.Value = i * 100 / lstlib.ListItems.Count For n = 0 To lstlib.ColumnHeaders.Count lstlib.ColumnHeaders.Count = n objWorkbook.ActiveSheet.Cells(i, n + 1).Value = lstlib.ListItems(i).ListSubItems(n).Text Next nNext iRange("C1:C" & i).SelectSelection.NumberFormat = "#,##0.000 "Range("A1").Activatepgbar.Value = 0pgbar.Visible = Falselblinf.Visible = FalseScreen.MousePointer = Defaultlblean.Caption = "Artículo " & lstlib.ListItems(lstlib.SelectedItem.Index).Textstbbar.Panels(1).Text = "Familia: " + lstfamilias.ListItems(lstfamilias.SelectedItem.Index).ListSubItems(1) + " " + "Subfamilia: " + lstsub.ListItems(lstsub.SelectedItem.Index).ListSubItems(1) + "" _+ " " + "Artículo: " + lstlib.ListItems(lstlib.SelectedItem.Index)objExcel.Visible = TrueSet objExcel = Nothing objExcel.Application.QuitEnd Sub
Espero que puedan ayudarme, gracias por vuestra ayuda.
Un saludo, :hola:
jegonzalezrubio:
Hola Amigo
En tu codigo no he visto que ha objWorkbook le asignes nothing
todos los objetos que definas en tu codigo le debes asignar Nothing para que que lo liberes de memoria
Chao
Brroz:
Aparte de ser muy conveniente (necesario, diría yo) establecer a Nothing todas las variables de objetos, tu problema está en esta línea:
--- Código: Text --- objExcel.Application.Quit
que debes sustituir por esto:
--- Código: Text --- objExcel.Quit
Date cuenta que objExcel es ya una instancia de Excel.Application, que es lo que quieres cerrar.
Abur.
Jeremy:
Hola de nuevo amig@s. Sigo con mi problema, no logro desvincular el Excel de mi programa en Visual. He probado con lo que me ha dicho jegonzalezrubio a asignar Nothing a las instancias que creo. Y también a lo que me ha dicho Brroz objExcel.quit. Pero se me sigue quedando bloqueado el Excel. Como os comentaba al principio, esto sucede al iniciar la primera exportación a Excel.
Ahora mismo el código de la exportación lo tengo así:
--- Código: Text --- Private Sub mnuexp_Click()Dim i As LongDim n As Long lblinf.Visible = Truelblinf.Caption = "Se están exportando " & lstlib.ListItems.Count & " registros. Esta operación puede tardar unos minutos, por favor espere..."pgbar.Visible = True Screen.MousePointer = vbHourglassOn Error Resume Next'Set objExcel = GetObject(, "Excel.Application")Set objExcel = GetObject(, "Excel.application")If Err.Number Then Err.Clear Set objExcel = CreateObject("Excel.Application") If Err.Number Then MsgBox "No se pudo abrir Excel" End IfEnd If Set objWorkbook = objExcel.Workbooks.Add For i = 0 To lstlib.ListItems.Count objWorkbook.ActiveSheet.Cells(i, 1).Value = lstlib.ListItems(i).Text pgbar.Value = i * 100 / lstlib.ListItems.Count For n = 0 To lstlib.ColumnHeaders.Count lstlib.ColumnHeaders.Count = n objWorkbook.ActiveSheet.Cells(i, n + 1).Value = lstlib.ListItems(i).ListSubItems(n).Text Next nNext iRange("C1:C" & i).SelectSelection.NumberFormat = "#,##0.000 "Range("A1").Activatepgbar.Value = 0pgbar.Visible = Falselblinf.Visible = FalseScreen.MousePointer = Defaultlblean.Caption = "Artículo " & lstlib.ListItems(lstlib.SelectedItem.Index).Textstbbar.Panels(1).Text = "Familia: " + lstfamilias.ListItems(lstfamilias.SelectedItem.Index).ListSubItems(1) + " " + "Subfamilia: " + lstsub.ListItems(lstsub.SelectedItem.Index).ListSubItems(1) + "" _+ " " + "Artículo: " + lstlib.ListItems(lstlib.SelectedItem.Index)objExcel.Visible = TrueSet objExcel = NothingSet objWorkbook = Nothing End Sub
Si hago esto:
--- Código: Text --- objExcel.Quit
lógicamente después de hacer la exportación a Excel, la hoja de Excel, valga la redundancia, se cerrará, por eso en ese momento me dice si quiero guardar o no el documento.
Espero que puedan echarme una mano :comp: , gracias a tod@s.
Un saludo, :hola:
DiabloRojo:
Qué tal Jeremy?
La verdad no estoy muy seguro... pero intenta colocar el
--- Código: Text --- objExcel.Quit
antes del
--- Código: Text --- Set objExcel = Nothing
Saludos. Ah! y dime si de esa forma funciona...
DiabloRojo
Navegación
[#] Página Siguiente
Ir a la versión completa