Domingo 22 de Diciembre de 2024, 13:48
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
Visual Basic 6.0 e inferiores
(Moderador:
F_Tanori
) »
Exportar A Excel
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Exportar A Excel (Leído 3691 veces)
Jeremy
Miembro activo
Mensajes: 40
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
Private Sub mnuexp_Click()
Dim i As Long
Dim n As Long
lblinf.Visible = True
lblinf.Caption = "Se están exportando " & lstlib.ListItems.Count & " registros. Esta operación puede tardar unos minutos, por favor espere..."
pgbar.Visible = True
Screen.MousePointer = vbHourglass
On Error Resume Next
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 If
End 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 n
Next i
Range("C1:C" & i).Select
Selection.NumberFormat = "#,##0.000 "
Range("A1").Activate
pgbar.Value = 0
pgbar.Visible = False
lblinf.Visible = False
Screen.MousePointer = Default
lblean.Caption = "Artículo " & lstlib.ListItems(lstlib.SelectedItem.Index).Text
stbbar.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 = True
Set objExcel = Nothing
objExcel.Application.Quit
End Sub
Espero que puedan ayudarme, gracias por vuestra ayuda.
Un saludo,
Tweet
"Cuando quieres algo, todo el Universo conspira para que realices tu deseo..."
jegonzalezrubio
Nuevo Miembro
Mensajes: 13
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
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
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
Miembro activo
Mensajes: 40
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
Private Sub mnuexp_Click()
Dim i As Long
Dim n As Long
lblinf.Visible = True
lblinf.Caption = "Se están exportando " & lstlib.ListItems.Count & " registros. Esta operación puede tardar unos minutos, por favor espere..."
pgbar.Visible = True
Screen.MousePointer = vbHourglass
On 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 If
End 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 n
Next i
Range("C1:C" & i).Select
Selection.NumberFormat = "#,##0.000 "
Range("A1").Activate
pgbar.Value = 0
pgbar.Visible = False
lblinf.Visible = False
Screen.MousePointer = Default
lblean.Caption = "Artículo " & lstlib.ListItems(lstlib.SelectedItem.Index).Text
stbbar.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 = True
Set objExcel = Nothing
Set 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
, gracias a tod@s.
Un saludo,
"Cuando quieres algo, todo el Universo conspira para que realices tu deseo..."
DiabloRojo
Miembro MUY activo
Mensajes: 220
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
objExcel.Quit
antes del
Código: Text
Set objExcel = Nothing
Saludos. Ah! y dime si de esa forma funciona...
DiabloRojo
Jeremy
Miembro activo
Mensajes: 40
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.
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
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
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
objWorkbook.SaveCopyAs "NombreDeLibro.Xls"
objWorkbook.Saved = True
La verdad es que no comprendo muy bien que cuernos te pasa.
Chao.
Atondo
Nuevo Miembro
Mensajes: 10
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
objWorkbook.close false 'si on deseas grabar o true si lo deseas
objExcel.quit
Set objExcel = Nothing
Set objWorkbook = Nothing
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
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
Private Sub Command1_Click()
Dim xlsApp As Variant
'Dim xlsApp As Excel.Application
'Set xlsApp = Excel.Application
Set xlsApp = CreateObject("Excel.application")
With xlsApp 'ApExcel
.Visible = True
.Workbooks.Add
men = "titulo" & vbCrLf & "Estudio de Rendimiento"
.Cells(1, 1) = Text1.Text
.Cells(1, 1).Font.Size = 12
'.Cell(1, 1).Font.FontStyle = "Verdana"
.Cells(1, 1).Font.Bold = True
.Range("A1").Select
.Selection.HorizontalAlignment = 3 'Center=3, Left=1 2, Right=4
.Cells(3, 1) = Text2.Text
.Cells(3, 1).Font.Size = 10
.Cells(3, 1).Font.Bold = True
.Range("A3").Select
.Selection.HorizontalAlignment = 3
For f = 0 To msflex.Rows - 1
For h = 0 To msflex.Cols - 1
With msflex
'.Col = h .Row = f
m = .TextMatrix(f, h)
End With
.Cells(5 + f, 1 + h) = m
Next h
b = "A" & 5 + f
b1 = "D" & 5 + f
.Range(b & ":" & b1).Borders.Color = RGB(0, 0, 0)
.Range(b & ":" & b1).Borders.LineStyle = 1 'Hasta el 12
Next f
'En negrita titulos de las columnas
.Range(A & 5 & ":" & D & 5).Select
.Selection.Font.Bold = True
'Alinear contenido primera tabla
For al1 = 0 To msflex.Rows
b = "A" & 5 + al1
b1 = "D" & 5 + al1
'.Range(b & ":" & b1).Borders.Color = RGB(0, 0, 0)
.Range(b & ":" & b1).Select
.Selection.HorizontalAlignment = 3
Next al1
.Cells(5 + msflex.Rows + 1, 1) = "Continuación Segunda Tabla"
For n = 0 To msflex1.Rows - 1
For m = 0 To msflex1.Cols - 1
With msflex1
'.Col = m .Row = n
l = .TextMatrix(n, m)
End With
.Cells(5 + n + msflex.Rows + 3, 1 + m) = l
Next m
b = "A" & 5 + n + msflex.Row + 3 + 1
b1 = "E" & 5 + n + msflex.Row + 3 + 1
.Range(b & ":" & b1).Borders.Color = RGB(0, 0, 0)
.Range(b & ":" & b1).Borders.LineStyle = 1
Next n
'En negrita titulos de ls segunda tabla
.Range(A & 5 + msflex.Row + 4 & ":" & D & 5 + msflex.Row + 4).Select
.Selection.Font.Bold = True
'Alinear toda la segunda tabla
For al = 0 To msflex1.Rows
b = "A" & 5 + al + msflex.Row + 3
b1 = "E" & 5 + al + msflex.Row + 3
.Range(b & ":" & b1).Select
.Selection.HorizontalAlignment = 3
Next al
'Continuación de los textos
.Cells(5 + msflex1.Row + msflex.Row + 6, 1) = "Resto del texto"
b = "A" & 5 + msflex1.Row + msflex.Row + 6
.Range(b).Select
.Selection.Font.Bold = True
'Seleccionar última celda
b = "A" & 5 + msflex1.Row + msflex.Row + 8
.Range(b).Select
.Sheets("Hoja1").Name = "Inventario"
'Ver documento antes de imprimir
If optVista.Value = True Then
.Worksheets.PrintPreview
End If
Set ApExcel = Nothing
End With
End Sub
Código: Text
Private Sub Form_Unload(Cancel As Integer)
Set xlsApp = Nothing
End Sub
Nos vemos.
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
Visual Basic 6.0 e inferiores
(Moderador:
F_Tanori
) »
Exportar A Excel