Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Cerrar proceso Excel desde Access

1,584 views
Skip to first unread message

Pedro Moreno

unread,
Jul 26, 2003, 2:47:10 PM7/26/03
to
Tengo una BD en Access 2002, que entre otras cosas, abre una hoja Excel para
manipular alguno de sus datos con objeto de darle un formato concreto e
importarla a una tabla de esa BD. Todo funciona OK.
Esto es el final del codigo:

'*==========================*
' Salvo y cierro la hoja , pues si no no puedo importar a la tabla
hoja.ActiveWorkbook.Save
hoja.ActiveWorkbook.Close
' Transfiero el AREA DE DATOS a la tabla "tblEXCEL"
DoCmd.TransferSpreadsheet TransferType:=acImport,SpreadSheetType:=5, _
TableName:="tblEXCEL", FileName:=Me.Fichero_XLS, _
Hasfieldnames:=True, Range:="AREA_DATOS"
hoja.Application.Quit
' Libera la variable de objeto.
Set hoja = Nothing

MsgBox " PROCESO TERMINADO "
'*==========================*

Bueno... todo va bien excepto que en el Administrador de Tareas me deja
abierto el proceso Excel.exe
Si en ese momento con la BD abierta, abro la hoja que acabo de modificar, no
puedo visualizarla, aunque aparentemente me abre la ventana de la hoja. Es
como si se quedara en segundo plano.
Cuando cierro la BD y Access entonces me libera el proceso de Excel en
el Administrador de Tareas

Alguna sugerencia.. estoy haciendo algo mal?.. me falta algo por hacer?...

Gracias anticipadas

Pedro Moreno


Valentín Playá (Sonotronic)

unread,
Jul 26, 2003, 4:09:17 PM7/26/03
to
Pedro,

de momento yo pasaría el quit y el set hoja = nothing antes del transfer.

Saludos,

Valentín
*************************************************
"Pedro Moreno" <resp...@al.grupo> escribió en el mensaje
news:O0AUa.29148$FN3.2...@news.ono.com...

José Mª

unread,
Jul 26, 2003, 9:33:24 PM7/26/03
to
Pedro, ¿como empezaste el procedimiento? seguro que declaraste alguna variable
de tipo Excel.Application ¿correcto? en ese caso, y como última linea, yo
pondría un Set MiVariable=Nothing.

Espero te sirva.
Salu2.

--
José Mª Fueyo [MS-MVP Access]

¡¡Se está preparando el III Encuentro de Sufridores de Access!! ¡¡Y ya está
cerca...!!

http://www.mcpegasus.com/encuentros/iiiencuentro.htm


Rosa Sanjuan

unread,
Jul 27, 2003, 12:46:30 AM7/27/03
to
A mi esto me funciona correctamente:
99\-99\-00;0;_
Y en el evento al entrar del campo tengo
me![nombreCampo]=null

De todos modos no me extraña que haya problemas porque este formato no le
gusta
nada al Señor Access, solo quiere 00/00/00, o bien 00-MMM-00.
Deberiamos hacer un esfuerzo para adaptarnos a lo que nos ofrece y no
querer llevarlo a nuestro terreno. Es una opinión.

Saludos
Rosa


"Pedro Moreno" <resp...@al.grupo> escribió en el mensaje
news:O0AUa.29148$FN3.2...@news.ono.com...

Pedro Moreno

unread,
Jul 27, 2003, 6:20:25 AM7/27/03
to
Valentin y Jose Mª, gracias por la respuesta.

Por supuesto que comienzo el proceso declarando la variable "hoja":

Set hoja = CreateObject("Excel.Application", "")

y es esta variable la que utilizo en Quit y Nothing.

Con respecto a situarlo antes del Transfer, ya lo probé y sigue dejando
abierto el proceso Excel. Solo lo cierra si compacto la BD, o la cierro

Seguiremos investigando.

Gracias de todas maneras

Pedro Moreno


Eva Etxebeste

unread,
Jul 27, 2003, 1:45:02 PM7/27/03
to
Hola Pedro

Te pongo un ejemplito de cómo hago yo esta historieta, que aunque se parece
mucho a lo tuyo, alguna variación hay. Por si te sirve :)

Dim oXLS As Object
Dim oHoja As Worksheet

' se está ejecutando excel ?
On Error Resume Next
Set oXLS = GetObject(, "excel.application")
If Err.Number <> 0 Then
Err.Clear
Set oXLS = CreateObject("excel.application")
End If
On Error GoTo error_1

' abrir el libro y cargar la hoja, en mi caso se llama RESUMEN. El
nombre de la hoja Excell está en strArch
oXLS.Workbooks.Open strArch
Set oHoja = oXLS.ActiveWorkbook.Worksheets("RESUMEN")

' Para leer el valor de una celda en particular
' Para asignar un valor a la celda, haces lo mismo pero al revés :)
ValorCelda = oHoja.Cells(<Fila>, <Columna>).Value

' La cerramos, podemos elegir salvar o no salvar cambios

oXLS.ActiveWorkbook.Close savechanges:=False

error_1:
DoCmd.Hourglass False
MsgBox "(" & Err.Number & ") " & sArch & vbCrLf & vbCrLf &
Err.Description, vbCritical
On Error Resume Next
oXLS.ActiveWorkbook.Close savechanges:=False
Set oXLS = Nothing
Exit Sub
End Sub

Un saludo
--
Eva Etxebeste
[MS MVP]


"Pedro Moreno" <resp...@al.grupo> escribió en el mensaje

news:JHNUa.29175$FN3.2...@news.ono.com...

José Mª

unread,
Jul 27, 2003, 6:14:48 PM7/27/03
to
Hola.
Sí tienes marcada la referencia, ¿has probado a hacer:?
Dim hoja as Excel.Application.
Set hoja=new Excel.Application

Y seguir con el resto de tu código?
Estás haciendo enlace tardío, con el createobjetct. Y desde Access, no es
necesario.
Prueba así. Y no lo instancias en la declaración...te puede llevar a
problemas de objetos que crees destuido y no es así.

José Mª

unread,
Jul 27, 2003, 6:45:11 PM7/27/03
to
Hola Pedro
Es curioso. Aunque cree y destruya las variables, use el método QUIT del objeto
Application de Excel para cerrar excel, en el visor de procesos me aparece un
Excel, que permanece hasta que salgo de Access.
No es lo que quieres, pero nos vamos acercando. Ya sabes, cierras Excel
utilizando el método QUIT del objeto Excel.Application

Seguiremos investigando...

Softjaen

unread,
Jul 27, 2003, 7:30:33 PM7/27/03
to

"José Mª Fueyo" escribió:

> Es curioso. Aunque cree y destruya las variables, use el método
> QUIT del objeto Application de Excel para cerrar excel, en el
> visor de procesos me aparece un Excel, que permanece hasta
> que salgo de Access.

Hola, José Mª:

No es que sea curioso, sino que me huelo que el método «TransferSpreadsheet»
crea internamente una referencia a Excel para importar los datos a una tabla
de Access, de ahí que cuando finalizas el entorno de Microsoft Access, la
referencia de Excel desaparece del Administrador de Tareas de Windows.

El utilizar el método «Quit» hace que Excel termine, y el establecer a
«Nothing» el valor de la variable objeto «hoja», hace que se libere la
referencia al objeto y los recursos asociados, pero si después ejecutamos el
método «TransferSpreadsheet», para mí que Access crea una referencia a Excel
internamente. No estoy seguro, pero creo que «por ahí van los tiros.»

¡Con lo fácil y rápido que es importar una hoja de cálculo de Excel a una
tabla de Access, utilizando sólo consultas SQL mediante las bibliotecas de
ADO o DAO!

En fin, hay gustos para todo. :-)

Un saludo.

--
Enrique Martínez
[MS MVP - VB]

Softjaen

unread,
Jul 27, 2003, 7:56:15 PM7/27/03
to

José Mª, perdona un momento.

Me ha dado por hacer una pequeña prueba, y cuando acaba la importación, no
me aparece ninguna referencia a Excel en el Administrador de Tareas. Esto es
lo que he ejecutado desde la ventana «Inmediato» de un módulo de Access:

Dim oWorkBook As Excel.Workbook ' Libro de trabajo
Dim hoja As Excel.Application ' Aplicación Excel

' Creo una instancia de Excel
Set hoja = New Excel.Application

' Creo un objeto WorkBook
Set oWorkBook = hoja.Workbooks.Open(Filename:="C:\Libro1.xls")

' Muestro Excel, que para el ejemplo no sirve para nada
' ya que posteriormente la vamos a cerrar. :-)
hoja.Visible = True

' Salvo y cierro la hoja , pues si no,
' no puedo importar la tabla
With hoja
.ActiveWorkbook.Save
.ActiveWorkbook.Close
.Workbooks.Close
.Application.Quit
End With

' Libera las referencias a objetos
Set oWorkBook = Nothing
Set hoja = Nothing

' Transfiero el AREA DE DATOS a la tabla "tblEXCEL"

DoCmd.TransferSpreadsheet TransferType:=acImport, SpreadSheetType:=5, _
TableName:="tblEXCEL", Filename:="C:\Libro1.xls", _
Hasfieldnames:=True, Range:="Rango1"


Ejecúta el ejemplo para ver lo que ocurre.

José Mª

unread,
Jul 27, 2003, 8:12:50 PM7/27/03
to
Hola Enrique
¿Y en la lista de procesos? por qué ahí aparece un Excel..exe mu grandote, el
muy...
Hemos estado ahora hablando y probando el Búho y yo, y no nos explicamos que
@#*! sucede. Los tiros deben de ir por donde tu dices: Excel, o Access, hacen
uso de alguna referencia interna que no podemos controlar.
Esto es lo que yo he probado

Public Sub PRUEBA()
Dim MiExcel As Excel.Application
Dim MiWrk As Excel.Workbook
Set MiExcel = New Excel.Application
MiExcel.Visible = True
Set MiWrk = Excel.Workbooks.Add
Cells(1, 1) = "PRIMERA CELDA"
Cells(2, 1) = "SEGUNDA CELDA"
Cells(3, 1) = "TERCERA CELDA"
MiWrk.SaveAs "prueba"
MiExcel.Quit
Set MiWrk = Nothing
Set MiExcel = Nothing

MsgBox "TERMINADO"

End Sub

Ejecutalo, y mira en procesos activos a ver que te aparece.
Salu2, y encantado de verte por estos foros, "mondtruo" ;-)

Softjaen

unread,
Jul 28, 2003, 2:03:24 AM7/28/03
to

"José Mª Fueyo" escribió:

> ¿Y en la lista de procesos? por qué ahí aparece un Excel..exe mu grandote,
> el muy...
> Hemos estado ahora hablando y probando el Búho y yo, y no nos explicamos
> que @#*! sucede. Los tiros deben de ir por donde tu dices: Excel, o
Access,
> hacen uso de alguna referencia interna que no podemos controlar.

Pues no tengo ni «p**a idea» el motivo de que tu código deje una referencia
a Excel en la lista de procesos y mi código no.

Leyendo los comentarios sobre la acción «TransferirHojaCálculo», ésta actúa
de manera simular a elegir la opción «Obtener datos externos» o a «Guardar
como» del menú «Archivo» de Access, es decir, que para importar o exportar
desde o hacia Excel, utiliza el ISAM de Excel, no una referencia a la
biblioteca «Microsoft Excel 10.0 Object Library», y me he dado cuenta porque
he renombrado la ruta del ISAM de Excel en el registro de Windows, y al
querer ejecutar el método «TransferSpreadsheet» he obtenido el famoso error
número 3170: «No se pudo encontrar el archivo ISAM instalable».

> Esto es lo que yo he probado
>

> Set MiExcel = New Excel.Application
> MiExcel.Visible = True
>

> ******************************
> Set MiWrk = Excel.Workbooks.Add
> ******************************

Aquí estas creando un nuevo objeto «Excel.Workbook», pero en lugar de
utilizar la colección «Workbooks» de la variable objeto «MiExcel», estas
utilizando la misma colección pero del objeto genérico «Excel»:

' Creo un objeto WorkBook
Set MiWrk = MiExcel.Workbooks.Add

No es que ésto vaya a corregir el problema, pero vamos a intentar que no
haya errores.

He realizado unas correciones y ya no queda referencia alguna a Excel en la
lista de procesos del Administrador de Tareas. He puesto una rutina de
errores, porque de vez en cuando sale un error muy molesto, el cual tampoco
comprendo su motivo: «El equipo servidor remoto no existe o no está
disponible».

En fín, que creo que el código se podía quedar así:

Sub Prueba()

Dim MiExcel As Excel.Application
Dim MiWrk As Excel.Workbook

On Error GoTo ErrOpenExcel

' Creo una instancia de Excel

Set MiExcel = New Excel.Application

' Creo un objeto WorkBook
Set MiWrk = MiExcel.Workbooks.Add

' Escribo unos datos


Cells(1, 1) = "PRIMERA CELDA"
Cells(2, 1) = "SEGUNDA CELDA"
Cells(3, 1) = "TERCERA CELDA"

' Muestro Excel
MiExcel.Visible = True

ErrOpenExcel:
' Salvo Cómo... y cierro la hoja
With MiExcel
.ActiveWorkbook.SaveAs "prueba"


.ActiveWorkbook.Close
.Workbooks.Close
.Application.Quit
End With

If Not Err Then
MsgBox "TERMINADO"
Else
MsgBox Err.Description, , Err.Number
End If

' Libera las referencias a objetos

Set MiWrk = Nothing
Set MiExcel = Nothing

End Sub

Bueno, probadlo y luego me lo contáis. :-)

Búho

unread,
Jul 28, 2003, 3:58:36 AM7/28/03
to
Ya te digo... ¿Tu crees que se puede ver algo claro a las 2 y pico de la madrugada, de un Domingo para un Lunes? :-S
Además...de un domingo estresado, todo el dia con la suegra.
Si es que no tenemos remedio, liante que eres un liante :-P

--

Saludos desde Valladolid
Francisco Javier García Aguado
http://www.clikear.com/webs/accessbhuo/
http://groups.msn.com/Access2000VisualBasic/

"José Mª Fueyo" <jmfuey...@ya.com> escribió en el mensaje news:3F246A82...@ya.com...


> Hola Enrique
> ¿Y en la lista de procesos? por qué ahí aparece un Excel..exe mu grandote, el
> muy...
> Hemos estado ahora hablando y probando el Búho y yo, y no nos explicamos que
> @#*! sucede. Los tiros deben de ir por donde tu dices: Excel, o Access, hacen
> uso de alguna referencia interna que no podemos controlar.
> Esto es lo que yo he probado

---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.502 / Virus Database: 300 - Release Date: 18/07/2003

Búho

unread,
Jul 28, 2003, 4:07:05 AM7/28/03
to
Enrique, se me sigue quedando el Excel pillado en los proceos de windows. (Con to codigo)
Win XP Pro y Access XP.
:-S

--

Saludos desde Valladolid
Francisco Javier García Aguado
http://www.clikear.com/webs/accessbhuo/
http://groups.msn.com/Access2000VisualBasic/

"Softjaen" <grupo_n...@softjaen.es> escribió en el mensaje news:eZif23MV...@tk2msftngp13.phx.gbl...

Softjaen

unread,
Jul 28, 2003, 6:06:39 AM7/28/03
to
"Búho" escribió:

> Enrique, se me sigue quedando el Excel pillado en

> los proceos de windows. (Con tu codigo)


> Win XP Pro y Access XP.

Hola, Francisco:

¡Joder! No entiendo lo que está pasando.

Los dos códigos que envié los probé en WinXP y Access XP,
y aunque en un principio tenía el mismo problema, lo
llegué a solventar.

Ahora lo acabo de ejecutar en Access 97 y ..., ¡coje
piedras!, con Windows 95, y sólo se me queda pillada la
referencia la primera vez que lo ejecuto. Elimino el
proceso y ya no vuelve a quedarse referenciada la
biblioteca de Excel cuando de nuevo ejecuto el código
tantas veces como desee.

Francisco, no tengo ni «puñetera idea». No lo he probado
con Visual Basic, pero las veces que he ejecutado un
código parecido, que yo sepa no se queda referenciada la
biblioteca de Excel en la lista de procesos. En fin, yo me
doy por rendido. El que quiera importar/exportar datos de
Excel, que utilice el ISAM de Excel con las bibliotecas de
ADO o DAO.

> ¿Tu crees que se puede ver algo claro a las 2 y pico
> de la madrugada, de un Domingo para un Lunes?

Así estaba yo también: a las dos de la madrugada probando
el puñetero código. Menos mal que estoy de vacaciones.

> Si es que no tenemos remedio, liante que eres un liante

¡Jaja! Yo también sentí curiosidad al leer el mensaje de
José María, y estuve un buen rato pulsando la famosa
combinación de teclas «Ctrl+Alt+Del». ¡Vaya un lío de
cojo..s! :-))

Un saludo, Francisco

José Mª

unread,
Jul 28, 2003, 10:40:47 AM7/28/03
to
Hola Pedro.
Según consejo de nuestra inefable Evap, he probado con enlace tardio, y
joer, no se queda procesos abiertos
Te copio el ejempo que uso

Public Sub PRUEBA4()
'Creado por Eva Etxeveste
Dim oXLS As Object
Dim MiWrk As Object

On Error Resume Next
Set oXLS = GetObject(, "excel.application")
If Err.Number <> 0 Then
Err.Clear
Set oXLS = CreateObject("excel.application")
End If

Set MiWrk = oXLS.Workbooks.Add


Cells(1, 1) = "PRIMERA CELDA"
Cells(2, 1) = "SEGUNDA CELDA"
Cells(3, 1) = "TERCERA CELDA"

MiWrk.SaveAs "prueba2"
oXLS.Quit
Set MiWrk = Nothing
Set oXLS = Nothing
MsgBox "TERMINADO"
End Sub
Prueba a ver si va. Si lo hace, no preguntes por qué...al menos a mi. No
tengo ni P.I., pero parece que va.

Salu2.

Eva Etxebeste

unread,
Jul 28, 2003, 10:54:16 AM7/28/03
to
Si es que no me hacéis ni caso, y pasa lo que pasa .... ;)

--
Eva Etxebeste
[MS MVP]

"José Mª Fueyo" <jmfuey...@ya.com> escribió en el mensaje
news:3F2535EF...@ya.com...

José Mª Fueyo (Desde el curro)

unread,
Jul 28, 2003, 2:53:17 PM7/28/03
to
Hola Pedro.
Ante todo, gracias por tu aportación con el tema de referencias. Desconocía
al completo esa posibilidad.
Haz una última prueba, que se me acaba de iluminar.
Siguiendo la sugerencia de Evap, hazlo con vinculación tardía (CreateObject)
pero asegurate que no existe ninguna referencia a Excel. Veamos sí
así...esto funciona.
Pero por mis muelas que no me quedo sín una explicación. Esto NO es lógico.
Algo tiene que pasar en la interacción Access-Excel que desconozco...

Salu2 y haznos saber sí eso funciona.

José Mª Fueyo
MS MVP Access


Softjaen

unread,
Jul 28, 2003, 4:00:47 PM7/28/03
to

"Pedro Moreno" escribió:

> Pego el codigo completo del boton del
> formulario que realiza todo el proceso, una vez
> seleccionada la hoja que quiero importar.

Hola, Pedro:

Sin entrar en detalles sobre la forma de configurar las celdas de una hoja
de cálculo de Excel y su contenido, si deseas conocer otra forma más
sencilla y eficaz de importar los datos de una hoja de cálculo de Excell (o
un rango de celdas con/sin nombre) a una base de datos de Access, échale un
vistazo al siguiente artículo:

Trabajar con ADO, DAO y Excel
http://es.geocities.com/softjaen/Articulos/Excel/ado_dao_excel.htm

Te aseguro, ¡¡POR MIS NIÑOS!!, que no se te quedará en la lista de procesos
ninguna referencia a «EXCEL.EXE», ya que no necesitaras, EN NINGÚN CASO,
referenciar la biblioteca de tipos de Microsoft Excel.

Un saludo

José Mª

unread,
Jul 28, 2003, 7:56:44 PM7/28/03
to
<pego>
Te aseguro, ¡¡POR MIS NIÑOS!!
</pego>

Te aseguro, Enrique, que a tus niños los queremos bien sanos jejejeje
En serio, me j**** mucho éste tema. No le veo ninguna razón de ser
Acabo de poner un post a los gurús de Access de más allá del charco, a ver sí
saben algo que no sabemos...

José Mª

unread,
Jul 28, 2003, 8:58:35 PM7/28/03
to
Todas las pruebas van a tu favor, Evap. Los gurús del otro lado del charco me
lo acaban de afirmar. Ahora solo espero una explicación...

No he visto todabía tu petición de platos de comida. ¿Necesitas ayuda....?

Búho

unread,
Jul 29, 2003, 3:43:22 AM7/29/03
to
>Así estaba yo también: a las dos de la madrugada probando
>el puñetero código. Menos mal que estoy de vacaciones.

Pues nada, olvidate de estas cosas y a disfrutar de las vacaciones, que luego se hacen cortas.
Yo estoy pasando un verano como los titiriteros, de acá para allá, que no paro.
Venga...felices vacances (Supongo que merecidas...¿O no?)


--

Saludos desde Valladolid
Francisco Javier García Aguado
http://www.clikear.com/webs/accessbhuo/
http://groups.msn.com/Access2000VisualBasic/

---

José Mª

unread,
Jul 29, 2003, 5:19:01 AM7/29/03
to
Hola Eva.
Con esto termino éste hilo, y me doy por vencido :-(
Hasta Microsoft tampoco usa enlace temprano. La prueba, éste artículo de la
Kb. Por cierto, Pedro, creo te servirá también
http://tinyurl.com/idep
Pero sigo sin entenderlo...

José Mª

unread,
Jul 29, 2003, 10:39:47 AM7/29/03
to
Hola a todos.
Solo para dejar constancia de un error, que me acaban de cazar, en mi código.
Éste tendria que ser
Public Sub PRUEBA()
    Dim MiExcel As Excel.Application
    Dim MiWrk As Excel.Workbook
    Set MiExcel = New Excel.Application
    MiExcel.Visible = True
    Set MiWrk = MiExcel.Workbooks.Add 'Aquí tenía  Set MiWrk = Excel.Workbooks.Add, con lo que añadía nueva instancia de la librería Excel, sin controlar :-( Esta calóoooo.....
    MiWrk.Worksheets(1).Cells(1, 1) = "PRIMERA CELDA"
    MiWrk.Worksheets(1).Cells(2, 1) = "SEGUNDA CELDA"
    MiWrk.Worksheets(1).Cells(3, 1) = "TERCERA CELDA"
    MiWrk.SaveAs "prueba"
    MiExcel.Quit
    Set MiWrk = Nothing
    Set MiExcel = Nothing
    MsgBox "TERMINADO"
End Sub

Ahora, no queda ningún proceso Excel.exe muerto.
Pablo, revisa tu código a ver sí todos los objetos están bien instanciados y destruidos.
Salu2 (ya puedo descansar tranquilo jejejejeje)

Eva Etxebeste

unread,
Jul 29, 2003, 3:34:25 PM7/29/03
to
> No he visto todabía tu petición de platos de comida. ¿Necesitas ayuda....?

Jomio de mi vida!! parece que estoy muerta de hambre!!
;)))))))))))))))))))))

No, de momento mi saque no ha podido con mi nómina, bastante bien vamos :)
Pero aprovechando, os invito a entrar una vez al día a :
http://www.porloschicos.com/servlet/PorLosChicos?comando=donar

No hay que hacer nada, simplemente entrar y unos señores con mucha pasta
donan la cantidad equivalente a un plato de comida a comedores solidarios
argentinos. Por cierto, los responsables de la web son un grupo de
argentinos del seattlewa :)))) Pos eso, que no cuesta ná :)

Un saludo


--
Eva Etxebeste
[MS MVP]


>

José Mª

unread,
Jul 29, 2003, 8:39:24 PM7/29/03
to
Acuertate, Evap, que sí te lanzas a las ñus guiris, ponles esto
http://www.porloschicos.com/index_english.htm

Eva Etxebeste

unread,
Jul 30, 2003, 2:11:49 AM7/30/03
to
De momento las ñus guiris las leo, pero no me atrevo a meter cuchara, que
hay mucho "monstruo" por allá :)

Un saludo
--
Eva Etxebeste
[MS MVP]

"José Mª Fueyo" <jmfuey...@ya.com> escribió en el mensaje
news:3F2713BC...@ya.com...

0 new messages