Programación General > Visual Basic 6.0 e inferiores

 Exportar A Excel

(1/2) > >>

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

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa