'*==========================*
' 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
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...
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
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...
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
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...
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í.
Seguiremos investigando...
> 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]
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.
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" ;-)
> ¿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. :-)
--
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
--
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...
> 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
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.
"José Mª Fueyo" <jmfuey...@ya.com> escribió en el mensaje
news:3F2535EF...@ya.com...
Salu2 y haznos saber sí eso funciona.
José Mª Fueyo
MS MVP Access
> 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
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...
No he visto todabía tu petición de platos de comida. ¿Necesitas ayuda....?
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/
---
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)
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]
>
Un saludo
--
Eva Etxebeste
[MS MVP]
"José Mª Fueyo" <jmfuey...@ya.com> escribió en el mensaje
news:3F2713BC...@ya.com...