• Domingo 22 de Diciembre de 2024, 18:32

Autor Tema:  Exportar A Excel  (Leído 3692 veces)

Jeremy

  • Miembro activo
  • **
  • Mensajes: 40
    • Ver Perfil
Exportar A Excel
« en: Jueves 16 de Diciembre de 2004, 20:59 »
0
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
  1.  
  2. Private Sub mnuexp_Click()
  3. Dim i As Long
  4. Dim n As Long
  5.  
  6. lblinf.Visible = True
  7. lblinf.Caption = "Se están exportando " & lstlib.ListItems.Count & " registros. Esta operación puede tardar unos minutos, por favor espere..."
  8. pgbar.Visible = True
  9.  
  10. Screen.MousePointer = vbHourglass
  11. On Error Resume Next
  12. Set objExcel = GetObject(, "Excel.Application")
  13. If Err.Number Then
  14.     Err.Clear
  15.    
  16.     Set objExcel = CreateObject("Excel.Application")
  17.    
  18.     If Err.Number Then
  19.         MsgBox "No se pudo abrir Excel"
  20.     End If
  21. End If
  22.  
  23. Set objWorkbook = objExcel.Workbooks.Add
  24.  
  25. For i = 0 To lstlib.ListItems.Count
  26.     objWorkbook.ActiveSheet.Cells(i, 1).Value = lstlib.ListItems(i).Text
  27.     pgbar.Value = i * 100 / lstlib.ListItems.Count
  28.     For n = 0 To lstlib.ColumnHeaders.Count
  29.         lstlib.ColumnHeaders.Count = n
  30.         objWorkbook.ActiveSheet.Cells(i, n + 1).Value = lstlib.ListItems(i).ListSubItems(n).Text
  31.     Next n
  32. Next i
  33. Range("C1:C" & i).Select
  34. Selection.NumberFormat = "#,##0.000 "
  35. Range("A1").Activate
  36. pgbar.Value = 0
  37. pgbar.Visible = False
  38. lblinf.Visible = False
  39. Screen.MousePointer = Default
  40. lblean.Caption = "Artículo " & lstlib.ListItems(lstlib.SelectedItem.Index).Text
  41. stbbar.Panels(1).Text = "Familia: " + lstfamilias.ListItems(lstfamilias.SelectedItem.Index).ListSubItems(1) + " " + "Subfamilia: " + lstsub.ListItems(lstsub.SelectedItem.Index).ListSubItems(1) + "" _
  42. + " " + "Artículo: " + lstlib.ListItems(lstlib.SelectedItem.Index)
  43. objExcel.Visible = True
  44. Set objExcel = Nothing
  45.  
  46. objExcel.Application.Quit
  47. End Sub
  48.  
  49.  
  50.  

Espero que puedan ayudarme, gracias por vuestra ayuda.

Un saludo,  :hola:
"Cuando quieres algo, todo el Universo conspira para que realices tu deseo..."

jegonzalezrubio

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Exportar A Excel
« Respuesta #1 en: Jueves 16 de Diciembre de 2004, 21:20 »
0
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

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Exportar A Excel
« Respuesta #2 en: Viernes 17 de Diciembre de 2004, 09:39 »
0
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
  1.  
  2. objExcel.Application.Quit
  3.  
  4.  

que debes sustituir por esto:
Código: Text
  1.  
  2. objExcel.Quit
  3.  
  4.  

Date cuenta que objExcel es ya una instancia de Excel.Application, que es lo que quieres cerrar.

Abur.

Jeremy

  • Miembro activo
  • **
  • Mensajes: 40
    • Ver Perfil
Re: Exportar A Excel
« Respuesta #3 en: Domingo 19 de Diciembre de 2004, 21:06 »
0
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
  1.  
  2. Private Sub mnuexp_Click()
  3. Dim i As Long
  4. Dim n As Long
  5.  
  6. lblinf.Visible = True
  7. lblinf.Caption = "Se están exportando " & lstlib.ListItems.Count & " registros. Esta operación puede tardar unos minutos, por favor espere..."
  8. pgbar.Visible = True
  9.  
  10. Screen.MousePointer = vbHourglass
  11. On Error Resume Next
  12. 'Set objExcel = GetObject(, "Excel.Application")
  13. Set objExcel = GetObject(, "Excel.application")
  14. If Err.Number Then
  15.     Err.Clear
  16.  
  17.     Set objExcel = CreateObject("Excel.Application")
  18.    
  19.     If Err.Number Then
  20.         MsgBox "No se pudo abrir Excel"
  21.     End If
  22. End If
  23.  
  24. Set objWorkbook = objExcel.Workbooks.Add
  25.  
  26. For i = 0 To lstlib.ListItems.Count
  27.     objWorkbook.ActiveSheet.Cells(i, 1).Value = lstlib.ListItems(i).Text
  28.     pgbar.Value = i * 100 / lstlib.ListItems.Count
  29.     For n = 0 To lstlib.ColumnHeaders.Count
  30.         lstlib.ColumnHeaders.Count = n
  31.         objWorkbook.ActiveSheet.Cells(i, n + 1).Value = lstlib.ListItems(i).ListSubItems(n).Text
  32.     Next n
  33. Next i
  34. Range("C1:C" & i).Select
  35. Selection.NumberFormat = "#,##0.000 "
  36. Range("A1").Activate
  37. pgbar.Value = 0
  38. pgbar.Visible = False
  39. lblinf.Visible = False
  40. Screen.MousePointer = Default
  41. lblean.Caption = "Artículo " & lstlib.ListItems(lstlib.SelectedItem.Index).Text
  42. stbbar.Panels(1).Text = "Familia: " + lstfamilias.ListItems(lstfamilias.SelectedItem.Index).ListSubItems(1) + " " + "Subfamilia: " + lstsub.ListItems(lstsub.SelectedItem.Index).ListSubItems(1) + "" _
  43. + " " + "Artículo: " + lstlib.ListItems(lstlib.SelectedItem.Index)
  44. objExcel.Visible = True
  45. Set objExcel = Nothing
  46. Set objWorkbook = Nothing
  47.  
  48. End Sub
  49.  
  50.  
  51.  

Si hago esto:

Código: Text
  1.  
  2. objExcel.Quit
  3.  
  4.  

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:
"Cuando quieres algo, todo el Universo conspira para que realices tu deseo..."

DiabloRojo

  • Miembro MUY activo
  • ***
  • Mensajes: 220
    • Ver Perfil
Re: Exportar A Excel
« Respuesta #4 en: Lunes 20 de Diciembre de 2004, 13:42 »
0
Qué tal Jeremy?
La verdad no estoy muy seguro... pero intenta colocar el

Código: Text
  1.  
  2. objExcel.Quit
  3.  
  4.  

antes del

Código: Text
  1.  
  2. Set objExcel = Nothing
  3.  
  4.  

Saludos. Ah! y dime si de esa forma funciona...


DiabloRojo

Jeremy

  • Miembro activo
  • **
  • Mensajes: 40
    • Ver Perfil
Re: Exportar A Excel
« Respuesta #5 en: Martes 21 de Diciembre de 2004, 09:58 »
0
Hola de nuevo. Sigo teniendo el mismo problema, pero me he dado cuenta que igual no es que el Excel se bloquee después de efectuar la exportación, lo que hace exactamente es que no me muestra la hoja que genera. Os explico: Después de hacer la primera exportación y teniendo mi programa activo, en las siguientes exportaciones lo que me muestra es sólo el Libro de trabajo, pero no la hoja donde me aparecerían todas las celdas con su respectivo contenido. Adjunto una imagen para que podáis ver mejor a qué me refiero.

Gracias por vuestra ayuda.

Jeremy.  :hola:
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
"Cuando quieres algo, todo el Universo conspira para que realices tu deseo..."

jegonzalezrubio

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
Re: Exportar A Excel
« Respuesta #6 en: Martes 21 de Diciembre de 2004, 14:06 »
0
hola yo tube una vez ese mismo problema pero para solucionarle cambie la manera de exportar los datos
aunque yo ahora exporto es un objeto llamado querytable en fin.

de todas manera el objeto range no se donde lo estas definiendo de pronto este objeto todavia esta amarado a excel

de todas maneras si esta interesado en la manera como yo envio los datos pues comunicamelo

Suerto

si me acuerdo te escribo chao

Brroz

  • Miembro de PLATA
  • *****
  • Mensajes: 1058
    • Ver Perfil
Re: Exportar A Excel
« Respuesta #7 en: Martes 21 de Diciembre de 2004, 15:09 »
0
Hola.

DiabloRojo tiene toda la razón, no me fijara en el detalle: cuando quieres llamar al método Quit, la variable objExcel ya no instancia ningún objeto. Si el código no casca es porque tiene un On Error resume next al principio.

Sobre el tema que dice jeremy de que al hacer un 'Quit' le dice si quiere guardar los cambios y tal, la cosa tiene solución fácilmente:

Código: Text
  1.  
  2.     objWorkbook.SaveCopyAs "NombreDeLibro.Xls"
  3.     objWorkbook.Saved = True
  4.  
  5.  

La verdad es que no comprendo muy bien que cuernos te pasa.

Chao.

Atondo

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Exportar A Excel
« Respuesta #8 en: Miércoles 22 de Diciembre de 2004, 02:21 »
0
cierra el libro en el que trabajas..
y la instancia de excel  y despues asignas a nothing las variables utilizadas,......,

Código: Text
  1.  
  2. objWorkbook.close false 'si on deseas grabar o true si lo deseas
  3. objExcel.quit
  4. Set objExcel = Nothing
  5. Set objWorkbook = Nothing
  6.  
  7.  

Para mayor seguridad utiliza plantillas, por si sale algun error y no se grabe informacion no requerida para la proxima vez que ejecute ese trabajo...
Atd

nostromo

  • Miembro MUY activo
  • ***
  • Mensajes: 134
    • Ver Perfil
    • http://win32cpp.cjb.net
Re: Exportar A Excel
« Respuesta #9 en: Lunes 27 de Diciembre de 2004, 03:10 »
0
Hola;

Mira, este es un ejemplo de lo que realize, nunca he tenido ningún problema ni siquiera bloqueo del excel.

Código: Text
  1.  
  2. Private Sub Command1_Click()
  3.     Dim xlsApp As Variant
  4.     'Dim xlsApp As Excel.Application
  5.     'Set xlsApp = Excel.Application
  6.     Set xlsApp = CreateObject("Excel.application")
  7.     With xlsApp 'ApExcel
  8.         .Visible = True
  9.         .Workbooks.Add
  10.         men = "titulo" & vbCrLf & "Estudio de Rendimiento"
  11.         .Cells(1, 1) = Text1.Text
  12.         .Cells(1, 1).Font.Size = 12
  13.         '.Cell(1, 1).Font.FontStyle = "Verdana"
  14.         .Cells(1, 1).Font.Bold = True
  15.         .Range("A1").Select
  16.         .Selection.HorizontalAlignment = 3  'Center=3, Left=1 2, Right=4
  17.         .Cells(3, 1) = Text2.Text
  18.         .Cells(3, 1).Font.Size = 10
  19.         .Cells(3, 1).Font.Bold = True
  20.         .Range("A3").Select
  21.         .Selection.HorizontalAlignment = 3
  22.         For f = 0 To msflex.Rows - 1
  23.             For h = 0 To msflex.Cols - 1
  24.                 With msflex
  25.                     '.Col = h .Row = f
  26.                     m = .TextMatrix(f, h)
  27.                 End With
  28.                 .Cells(5 + f, 1 + h) = m
  29.             Next h
  30.             b = "A" & 5 + f
  31.             b1 = "D" & 5 + f
  32.             .Range(b & ":" & b1).Borders.Color = RGB(0, 0, 0)
  33.             .Range(b & ":" & b1).Borders.LineStyle = 1  'Hasta el 12
  34.         Next f
  35.         'En negrita titulos de las columnas
  36.             .Range(A & 5 & ":" & D & 5).Select
  37.             .Selection.Font.Bold = True
  38.         'Alinear contenido primera tabla
  39.         For al1 = 0 To msflex.Rows
  40.             b = "A" & 5 + al1
  41.             b1 = "D" & 5 + al1
  42.             '.Range(b & ":" & b1).Borders.Color = RGB(0, 0, 0)
  43.             .Range(b & ":" & b1).Select
  44.             .Selection.HorizontalAlignment = 3
  45.         Next al1
  46.         .Cells(5 + msflex.Rows + 1, 1) = "Continuación Segunda Tabla"
  47.         For n = 0 To msflex1.Rows - 1
  48.             For m = 0 To msflex1.Cols - 1
  49.                 With msflex1
  50.                     '.Col = m .Row = n
  51.                     l = .TextMatrix(n, m)
  52.                 End With
  53.                 .Cells(5 + n + msflex.Rows + 3, 1 + m) = l
  54.             Next m
  55.             b = "A" & 5 + n + msflex.Row + 3 + 1
  56.             b1 = "E" & 5 + n + msflex.Row + 3 + 1
  57.             .Range(b & ":" & b1).Borders.Color = RGB(0, 0, 0)
  58.             .Range(b & ":" & b1).Borders.LineStyle = 1
  59.         Next n
  60.         'En negrita titulos de ls segunda tabla
  61.             .Range(A & 5 + msflex.Row + 4 & ":" & D & 5 + msflex.Row + 4).Select
  62.             .Selection.Font.Bold = True
  63.         'Alinear toda la segunda tabla
  64.         For al = 0 To msflex1.Rows
  65.             b = "A" & 5 + al + msflex.Row + 3
  66.             b1 = "E" & 5 + al + msflex.Row + 3
  67.             .Range(b & ":" & b1).Select
  68.             .Selection.HorizontalAlignment = 3
  69.         Next al
  70.         'Continuación de los textos
  71.         .Cells(5 + msflex1.Row + msflex.Row + 6, 1) = "Resto del texto"
  72.         b = "A" & 5 + msflex1.Row + msflex.Row + 6
  73.         .Range(b).Select
  74.         .Selection.Font.Bold = True
  75.         'Seleccionar última celda
  76.         b = "A" & 5 + msflex1.Row + msflex.Row + 8
  77.         .Range(b).Select
  78.         .Sheets("Hoja1").Name = "Inventario"
  79.         'Ver documento antes de imprimir
  80.         If optVista.Value = True Then
  81.             .Worksheets.PrintPreview
  82.         End If
  83.         Set ApExcel = Nothing
  84.     End With
  85. End Sub
  86.  
  87.  

Código: Text
  1.  
  2. Private Sub Form_Unload(Cancel As Integer)
  3.     Set xlsApp = Nothing
  4. End Sub
  5.  
  6.  

Nos vemos.