Importar hoja excel a tabla de access existente |
Responder ![]() |
Autor | |
Elenam_80 ![]() Habitual ![]() Unido: 04/Mayo/2015 Localización: Madrid Estado: Sin conexión Puntos: 121 |
![]() ![]() ![]() ![]() ![]() Enviado: 24/Mayo/2023 a las 11:55 |
Buenas, hace tiempo que no toco VBA y access y he estado más con VBA en excel. Me está costando un poco refrescar...
Estoy tratando de hacer algo que yo creía bastante sencillo pero me da error. Tengo con un access con un botón en un formulario que al hacer click importa en la tabla PEDIDOS los datos de Hoja1 de un fichero excel. En la tabla PEDIDOS el campo clave es ID y del excel solo quiero que se importen los registros que son nuevos, ya sabes lo que no están cargados en la tabla de Access (es un fichero excel que alguien va actualizando). El caso es que me da error y no sé cómo decirle que solo me importe los registros con ID nuevo que no existen en la tabla. Este es el código. Podéis echarle un ojo? Muchas gracias! Option Compare Database Private Sub Comando3_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Dim xlApp As Object Dim xlWorkbook As Object Dim xlWorksheet As Object Dim strFilePath As String ' Ruta del archivo de Excel que quiero importar strFilePath = "C:\Users\miusuario\Desktop\ejemplo\datos.xlsx" ' Nombre de la tabla de access donde quiero cargar los datos de excel Dim strTableName As String strTableName = "PEDIDOS" ' Inicio excel Set xlApp = CreateObject("Excel.Application") ' Abro el archivo excel Set xlWorkbook = xlApp.Workbooks.Open(strFilePath) ' Selecciono la hoja de Excel que contiene los datos a importar Set xlWorksheet = xlWorkbook.Sheets("Hoja1") ' Abro la base de datos de Access Set db = CurrentDb ' Abro la tabla existente en modo de edición Set rs = db.OpenRecordset(strTableName, dbOpenDynaset) ' Importo los datos de Excel a la tabla PEDIDOS (solo quiero importar los registros que por ID clave principal son nuevos) rs.MoveFirst Do While Not rs.EOF ' Leer los valores de cada columna del archivo de Excel rs.Fields("ID").Value = xlWorksheet.Cells(rs.AbsolutePosition + 1, 1).Value 'me da error aquí de conversión de tipos y tampoco sé cómo hacer para que solo importe los registros nuevos rs.Fields("PRODUCTO").Value = xlWorksheet.Cells(rs.AbsolutePosition + 1, 2).Value 'si borro la columna de arriba también me sale error en esta rs.Fields("CANTIDAD").Value = xlWorksheet.Cells(rs.AbsolutePosition + 1, 3).Value rs.Fields("PRECIO").Value = xlWorksheet.Cells(rs.AbsolutePosition + 1, 4).Value rs.Fields("FECHA").Value = xlWorksheet.Cells(rs.AbsolutePosition + 1, 5).Value rs.MoveNext Loop ' Cierro lo objetos rs.Close Set rs = Nothing Set db = Nothing ' Cierro el archivo excel xlWorkbook.Close Set xlWorkbook = Nothing xlApp.Quit Set xlApp = Nothing ' End Sub |
|
Ele
|
|
![]() |
|
01loko ![]() Colaborador ![]() Unido: 17/Agosto/2017 Localización: Santander Estado: Sin conexión Puntos: 807 |
![]() ![]() ![]() ![]() ![]() |
Creo que con esto, si no he entendido mal puedes saberlo Aunque puede que este equivocado
|
|
Recordar de que soy nuevo y estoy aprendiendo.
|
|
![]() |
|
xavi ![]() Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador ![]() ![]() Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: Sin conexión Puntos: 14552 |
![]() ![]() ![]() ![]() ![]() |
Yo lo plantearía al revés porque recorrer los registros del recordset de la tabla no lo veo yo.
El bucle lo haría por la hoja de Excel y, en cada fila, buscaría el ID en el recordset de la tabla. Si no existe, se inserta. Un saludo
|
|
![]() |
|
maxpro ![]() Colaborador ![]() Unido: 04/Marzo/2006 Localización: Argentina Estado: Sin conexión Puntos: 1549 |
![]() ![]() ![]() ![]() ![]() |
Hola. al boleo, sin probarlo
INSERT INTO tabla_destino (campo1, campo2, ...) |
|
-------Maxpro-------
San Luis - Argentina |
|
![]() |
|
maxpro ![]() Colaborador ![]() Unido: 04/Marzo/2006 Localización: Argentina Estado: Sin conexión Puntos: 1549 |
![]() ![]() ![]() ![]() ![]() |
Hola. probando esto dio el resultado deseado, el libro de excel debe estar vinculado en access. INSERT INTO TuTabla ( Id, Campo2,...........) SELECT TuHoja.Id, TuHoja.Campo2,........... FROM TuHoja LEFT JOIN TuTabla ON TuHoja.Id = TuTabla.Id WHERE (((TuHoja.Id) Is Not Null) AND ((TuTabla.Id) Is Null)); Saludos EDITO: Esto lo que hace es importar los registros nuevos del libro de excel sin tocar los demas, solamente agrega los nuevos que hayas agregado
Editado por maxpro - 25/Mayo/2023 a las 05:08 |
|
-------Maxpro-------
San Luis - Argentina |
|
![]() |
Responder ![]() |
|
Tweet
|
Ir al foro | Permisos de foro ![]() Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |