|
Responder
|
| Autor | |
Tiestomovil
Nuevo
Unido: 21/Marzo/2024 Localización: Huelva Estado: Sin conexión Puntos: 14 |
Tema: Importación de excel a access desd VBAEnviado: 25/Junio/2024 a las 09:20 |
|
Buenos días,
Tengo un archivo Access en el que me surgen las siguientes dudas: 1º Dentro del vba tengo la siguientes instruccion: DoCmd.TransferSpreadsheet acImport, , "RechazosTemp", RutA, True, HojaName & "!A1:Q" & b Se ejecuta perfectamente, pero me crea una tabla con errores de importación. Los datos de excel van a una tabla temporal que luego se eliminan los datos. Llevo varios días buscando una solución para que no cree la tabla con los errores de importacion, que dicho sea de paso, tiene un nombre distinto cada vez, y no logro conseguirlo. Si conocéis alguna forma en la que no se cree la dichosa tabla que tengo que eliminarla manualmente. 2º ¿Es posible que un archivo access que tiene una lista de sharepoint con unos 15000 registros, y otra con 10000, ocupen 149 Mb?. Me parece muchísimo, dado que ninguna tabla tiene imágenes, ni nada parecido. Los formularios tiene el logo de la empresa de unos 15Kb. ¿Por el hecho de usar listas de sharepoint, pesa más el archivo?. Como siempre, muchísimas gracias por anticipado.
![]() |
|
|
Si te caes siete veces, levántate ocho (Proverbio chino)
|
|
![]() |
|
Mihura
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
Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 14428 |
Enviado: 25/Junio/2024 a las 09:37 |
|
La cuestión es que si los datos no vienen 'niquelados' te va a crear esa tabla con los errores de importación. Yo prefiero importar la hoja Excel a una tabla temporal nueva y tratar ésta.
Otras posibles opciones serían: - abrir el Excel por automatización e ir tratando las líneas de una en una (más laboriosa y lenta si se tratan muchos registros) - abrir directamente un Rs sobre la hoja Excel y tratar después éste. EN cuanto al tamaño Sharepoint, si, las tablas son muuuucho más grandes, Sharepoint le mete una cantidad de campos propios que lo provocan. |
|
![]() |
|
Tiestomovil
Nuevo
Unido: 21/Marzo/2024 Localización: Huelva Estado: Sin conexión Puntos: 14 |
Enviado: 25/Junio/2024 a las 11:57 |
|
Muchísimas gracias Mihura.
Precisamente lo que hago es importar los datos a una tabla temporal, y luego a la definitiva con sus filtros correspondiente. Lo que hace el programa es abrir el excel, modifica las fechas que hay en él, pasándola a número (la tabla temporal las recibe como número), y mediante la instrucción que he puesto, la incluyen en la tabla temporal, y se cierra el excel. Luego con SELECT e INSERT INTO, va depurando e incluyendo en la tabla definitiva. Y funciona de maravilla, pero aún así, me crea una tabla con los errores de importación. Incluso he comprobado los errores, por si me faltan en la definitiva, pero no faltan o si faltan son datos que no necesito. Te pongo parte del código en el que se abre excel, se pasa a la tabla temporal. Set xLsBook = Workbooks.Open(RutA) Set xLsApp = xLsBook.Parent 'xLsApp.Visible = True HojaName = xLsBook.ActiveSheet.Name Set CnX = CurrentProject.Connection a = 0 b = xLsBook.Worksheets(HojaName).Range("a" & Rows.Count).End(xlUp).Row xLsBook.Worksheets(HojaName).Range("B1") = "NIFEmisor" xLsBook.Worksheets(HojaName).Range("C1") = "NDocumento" xLsBook.Worksheets(HojaName).Range("D1") = "FechaFactura" xLsBook.Worksheets(HojaName).Range("E1") = "FechaVencimiento" xLsBook.Worksheets(HojaName).Range("H1") = "NIFReceptor" xLsBook.Worksheets(HojaName).Range("I1") = "EstadoDocumento" xLsBook.Worksheets(HojaName).Range("J1") = "FechaEstado" xLsBook.Worksheets(HojaName).Range("K1") = "Codigoservicioext" xLsBook.Worksheets(HojaName).Range("L1") = "Fechaemision" xLsBook.Worksheets(HojaName).Range("M1") = "Fecharegistro" xLsBook.Worksheets(HojaName).Range("N1") = "NRegistro" xLsBook.Worksheets(HojaName).Range("O1") = "IdExterno" xLsBook.Worksheets(HojaName).Range("P1") = "Documentosadjuntos" xLsBook.Worksheets(HojaName).Range("Q1") = "MotivoRechazo" xLsBook.Worksheets(HojaName).Range("d:d").Select Selection.NumberFormat = "0" xLsBook.Worksheets(HojaName).Range("e:e").Select Selection.NumberFormat = "0" For ttr = 2 To b xLsBook.Worksheets(HojaName).Range("j" & ttr) = Int(xLsBook.Worksheets(HojaName).Range("j" & ttr)) PaR = ttr Ref = (PaR * 100) / b ProgressBar4 = Ref Next ttr EtqProgress.Caption = "Actualizando rechazos" ProgressBar4 = 0 xLsBook.Worksheets(HojaName).Range("j:j").Select Selection.NumberFormat = "0" xLsBook.Worksheets(HojaName).Range("l:m").Select Selection.NumberFormat = "0" xLsBook.Close Set xLsApp = Nothing DoCmd.TransferSpreadsheet acImport, , "RechazosTemp", RutA, True, HojaName & "!A1:Q" & b EtqProgress.Visible = True EtqProgress.Caption = "Actualizando rechazos" ProgressBar4.Visible = True ProgressBar4 = 0 EtqProgress.Visible = True En cuanto acaba de hacer el "Docmd....", se crea una tabla nueva en access con el nombre de la hoja excel y al final el litarl "ErroresDeImportacion..." El Access funciona bien, pero de vez en cuando tengo que eliminar las tablas que me crea. A ver que te parece. Saludos y gracias por anticipado.
|
|
|
Si te caes siete veces, levántate ocho (Proverbio chino)
|
|
![]() |
|
Mihura
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
Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 14428 |
Enviado: 25/Junio/2024 a las 12:04 |
|
La tabla temporal que se crea en Access, ¿tiene las definiciones de campos que esperas encontrar?
|
|
![]() |
|
Tiestomovil
Nuevo
Unido: 21/Marzo/2024 Localización: Huelva Estado: Sin conexión Puntos: 14 |
Enviado: 28/Junio/2024 a las 08:11 |
|
Buenos días,
La última tabla que ha creado es la siguiente: Campo: FechaVencimiento Error: Error en la conversion de tipo Fila: 518 No siempre da el error en la FechaVencimiento, a veces lo da en otros campos. He comprobado el dato de la fila 518 del excel en la tabla "RechazosTemp" y está correctamente. Te agradezco mucho tu colaboración Saludos |
|
|
Si te caes siete veces, levántate ocho (Proverbio chino)
|
|
![]() |
|
Mihura
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
Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 14428 |
Enviado: 28/Junio/2024 a las 09:33 |
|
Bueno, pues habrá que usar el trabuco termonuclear
![]() Dos opciones: - antes de importar inserta (manualmente o por VBA) 10 filas con todos los valores como texto, eso 'obliga' a Access a importar el Excel con todos los campos como string, con lo que no te cascará ninguno, el siguiente paso será dar formato a esos valores cuando vayas a usarlos. Las filas insertadas de más te las borras después (por ejemplo en la primera columna pones XYXYXY y haces una DELETE de la tabla de los registros que tengas ese valor). - abre el excel como un fichero de texto, cada fila es un registro y podrás obtener los campos separando los valores por las , (usando la función split). Este método es mucho más lento, pero podrás tratar los campos como tu quieras. Editado por Mihura - 28/Junio/2024 a las 09:35 |
|
![]() |
|
Tiestomovil
Nuevo
Unido: 21/Marzo/2024 Localización: Huelva Estado: Sin conexión Puntos: 14 |
Enviado: 01/Julio/2024 a las 08:11 |
|
Buenos días,
¡Eres fantástico! aunque he de confesar que no he hecho lo que has dicho exactamente, pero sí que he modificado a texto todos los campos del excel por vba, y en la tabla temporal del excel, lo mismo. Cuando paso los datos a la tabla definitiva, formateo los valores cada uno en su campo..., y se acabó los errores y la creación de tablas. ¡¡Muchísimas gracias!! Tienes unas cervecitas y jamoncito, o lo que prefieras, si te vienes a Huelva. Un saludos.
|
|
|
Si te caes siete veces, levántate ocho (Proverbio chino)
|
|
![]() |
|
Mihura
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
Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 14428 |
Enviado: 01/Julio/2024 a las 10:01 |
|
¡Hecho!
|
|
![]() |
|
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 |