Imprimir página | Cerrar ventana

Importar tabla desde excel a otra bbdd

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=86752
Fecha de impresión: 27/Marzo/2026 a las 04:08


Tema: Importar tabla desde excel a otra bbdd
Publicado por: paloma
Asunto: Importar tabla desde excel a otra bbdd
Fecha de publicación: 16/Agosto/2023 a las 10:57
Hola

Quiero importar un fichero excel a una tabla de access que está en otra base de datos (y que no está abierta) ¿me pueden ayudar?

Hasta ahora, venía haciendo un TransferSpreadsheet pero veo que solo sirve para la bbdd actual. La tabla está en otra bbdd y la tengo vinculada en la bbdd actual. También me interesaría actualizar la vinculación:

   Dim XlsRuta As String
   Dim tbl As String
   XlsRuta = "C:\Documents\Informes\Tabla1.xlsx"
   tbl = "Tabla1"
   DoCmd.TransferSpreadsheet acImport, 8, tbl, XlsRuta, True 


Gracias



Respuestas:
Publicado por: xavi
Fecha de publicación: 16/Agosto/2023 a las 12:29
Hola,

Abre una instancia de la otra base de datos y realizas la vinculación desde esa otra instancia:

Dim app As Application
Set app = CreateObject("Access.Application")
app.OpenCurrentDatabase larutacompletaalaotraBDD
app.DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, elnombretabladestino, rutacompletaalxls, True 
app.CloseCurrentDatabase
Set app = Nothing


Escrito al vuelo.

Un saludo


-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: paloma
Fecha de publicación: 16/Agosto/2023 a las 12:48

Gracias xavi. En la línea del TransferSpreadsheet me sale el Error 3734: El usuario Admin de la máquina ha situado la base de datos en un estado que impide que sea abierta o bloqueada.

¿sabes a qué puede deberse?


Publicado por: xavi
Fecha de publicación: 16/Agosto/2023 a las 12:50
En principio el mensaje está indicando que, o el Excel está abierto o la base de datos destino está abierta.



-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: paloma
Fecha de publicación: 16/Agosto/2023 a las 12:54

No tengo nada abierto. El fichero excel lo modifico previamente y antes de hacer la importación lo guardo y lo cierro:
      ActiveWorkbook.Save
      xlBk.Close

y la base de datos destino tampoco está abierta. No lo entiendo.


Publicado por: paloma
Fecha de publicación: 16/Agosto/2023 a las 13:30

Veo que la bbdd destino se queda abierta (laccdb) antes de hacer la importación y puede ser ese el problema. Y creo que es porque antes elimino los registros. 

Te pongo todo el código:

      sql = "delete * from Tabla1
      CurrentDb.Execute sql

Y luego ya la importación:

      XlsRuta1 = "C:\Documents\tablas.accdb"
      XlsRuta = "C:\Documents\Informes\Tabla1.xlsx"
      DoCmd.SetWarnings False
      Dim app As Application
      Set app = CreateObject("Access.Application")
      app.OpenCurrentDatabase XlsRuta1
      app.DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "Tabla1" XlsRuta, True
      app.CloseCurrentDatabase
      Set app = Nothing
      DoCmd.SetWarnings True


¿cómo puedo hacer para eliminar los registros en la bbdd destino y no en la tabla vinculada?


Publicado por: paloma
Fecha de publicación: 18/Agosto/2023 a las 11:06

vale, Confused he encontrado el modo, me ha costado porque no controlo casi nada las instancias o conexiones a otras bases de datos. Lo que tenía que añadir es abrir la base de datos destino y correr la sentencia que elimina los registros. Luego después, pasar el TransferSpreadsheet:

        app.OpenCurrentDatabase XlsRuta1
        app.DoCmd.RunSQL sql


Pueden cerrar el hilo. Smile

Saludos,


Publicado por: paloma
Fecha de publicación: 18/Agosto/2023 a las 12:07

Se puede cerrar el tema



Imprimir página | Cerrar ventana