** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Importación de excel a access desd VBA
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoImportación de excel a access desd VBA

 Responder Responder
Autor
Mensaje
Tiestomovil Ver desplegable
Nuevo
Nuevo


Unido: 21/Marzo/2024
Localización: Huelva
Estado: Sin conexión
Puntos: 14
Enlace directo a este mensaje Tema: Importación de excel a access desd VBA
    Enviado: 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.Smile
Si te caes siete veces, levántate ocho (Proverbio chino)
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14428
Enlace directo a este mensaje 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.



Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
Tiestomovil Ver desplegable
Nuevo
Nuevo


Unido: 21/Marzo/2024
Localización: Huelva
Estado: Sin conexión
Puntos: 14
Enlace directo a este mensaje 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)
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14428
Enlace directo a este mensaje Enviado: 25/Junio/2024 a las 12:04
La tabla temporal que se crea en Access, ¿tiene las definiciones de campos que esperas encontrar?


Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
Tiestomovil Ver desplegable
Nuevo
Nuevo


Unido: 21/Marzo/2024
Localización: Huelva
Estado: Sin conexión
Puntos: 14
Enlace directo a este mensaje 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)
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14428
Enlace directo a este mensaje Enviado: 28/Junio/2024 a las 09:33
Bueno, pues habrá que usar el trabuco termonuclear LOL

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
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
Tiestomovil Ver desplegable
Nuevo
Nuevo


Unido: 21/Marzo/2024
Localización: Huelva
Estado: Sin conexión
Puntos: 14
Enlace directo a este mensaje 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)
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14428
Enlace directo a este mensaje Enviado: 01/Julio/2024 a las 10:01
¡Hecho!  Tongue
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable