Importar datos de excel

Tengo una base de datos de access, y en una determinada tabla que se llama (Imagenes60), y dentro de esa tabla hay miles de registros con unas 7 columnas.
Por otro lado tengo una tabla de excel que meto datos en la columna B de tipo String.
Lo que me gustaría hacer es una macro, que me coja la columna B de la tabla de excel y me la introduzca al final de una columna de mi tabla (imagenes60) de access. Mi problema es que se`programar pequeñas macros en excel, pero nunca he programado macros en access, ni se importar los datos de un excel a access con una macro.
Como método, me da igual que empiece a pegar los datos a partir del primer lugar vacío de una columna que se elija o por el final del documento, porque en numero de registros a rellenar ( que están vacíos en esa columna) es el mismo que los datos a pegar.

1 respuesta

Respuesta
1
Primero tendrás que vincular el excel desde access
Y luego dime el nombre de la tabla access, sus campos. Así como el nombre que tiene el vinculo y sus campos
Antes de vincular, tengo una duda, por que tengo entendido que al vincular, los datos de esa tabla de excel si los modifico en excel, también se modificaran los de access, y mi caso es que la tabla que utilizo de excel va variando. Me explico, yo tengo dos hojas de excel(ALBARANES.xls y Fechas.xls) en las que tengo unas macros para ir importando datos de un OCR, yo abro mi hoja de excel, ejecuto las macros y se me crea la columna B con los datos que más tarde quiero importar a access. Volcaría la información en access, y volvería a dejar en blanco mis hojas(ALBARANES.xls y Fechas.xls) para volver a traer los nuevos datos.
Mi base de datos se llama "data" y la tabla de access donde quiero meter los datos se llama "Imagenes60". ¿Quieres qué te diga todos los campos o solo donde quiero introducir los datos?
Muchas gracias por tu interés!
Bien,
Entonces lo que haremos es cuando la tengas vinculada, hacer un volcado y luego se hará una eliminación de los registros de la tabla vinculada.
Ya la tengo vinculada y me aparece como Hoja 1 en la lista de tablas. ¿Cómo sigo?
Gracias de nuevo!
Bien,
Dime el nombre del campo de la tabla "Hoja1" que deseas volcar y el nombre de la tabla y el campo destino.
Pues el campo de la tabla de Hoja 1 es Campo2, y el nombre de la tabla destino es "Imagenes60" y el campo a rellenar es "NUMERO ALBARÁN"
Bien,
Primero la consulta de datos anexados. Ve a consultas, ver diseño, cambias a Vista SQL y pega el código.
Mira a ver si funciona
INSERT INTO "Imagenes60" ("NUMERO ALBARAN")
SELECT "Campo2" FROM "Hoja1"
¿Cómo cambio a vista SQL? en herramientas->¿Utilidades de la base de datos->Asistente para convertir a SQL Server?
Gracias
No no!  :)
Ve a consultas, y abre una consulta en vista diseño.
Y luego dale al triangulo que hay al lado del botón de cambio a vista de datos. Veras que se despliega un menu. Una de las opciones es SQL
si meto eso en el editor SQL, solo esas dos lineas,
INSERT INTO "Imagenes60" ("NUMERO ALBARAN")
SELECT "Campo2" FROM "Hoja1"
Me da error de sintaxis.
Ok, fallo mio.
Prueba esto:
Insert Into [Imagenes60] ([Numero albaran]) SELECT Hoja1.Campo2
FROM Hoja1;
Ya introduce los datos de Hoja1.Campo2 a Imagenes60. Numero albarán, pero no lo hace como quiero. A lo mejor me explique mal (LO SIENTO).
Lo que me hace ahora meter todos las Celdas del Campo2 al final de Imagenes60 en el campo Numero Albarán y deja todos los demás campos de la tabla Imagenes60 en blanco.
Y yo lo que yo tengo es lo siguiente: imaginate que la tabla de Hoja1 tiene 57 registros, pues el campo "Imagenes60.Numero albarán" tiene los últimos 57 registros vacíos, pero todos los demás campos llenos de datos. Y necesito que me meta esas 57 celdas de "Hoja1.Campo2" en los 57 huecos de "Imagenes60.Numero albarán". No se si eso sera ya mucho más complicado. Muchas gracias por todo el interés que te estas tomando!
Saludos
Vale, entonces necesito la relación que hay. Es decir un campo que sea igual en cada registro en las dos tablas
En principio no hay ningún campo que sea igual, pero puedo crear en excel fácilmente un campo que coincidiría con el primer campo de la tabla "Imagenes60" .
El primer campo de Imagenes60 se llama CodLote y para cada grupo de celdas que voy a volcar es siempre el mismo. Es decir que si voy a volcar los 57 registros que te dicho antes, los 57 tienen el mismo CodLote, que lo puedo introducir en la tabla de excel vinculada a la tabla Hoja1 de access.
El campo de Imagenes60 es el NombreArchivo, que también lo podría crear en el excel antes de vincularlo, porque es del tipo 00000001.tif, 00000002.tif... y es muy sencillo meterlo en el excel antes de meterlo en el access.
Me refiero a un campo que te distinga en la Hoja1, a que registro de Imagenes60 pertenece ese tif
Hoja1 en principio no tiene más campos, pero se puede hacer lo de meterle en la columnaC el CodLote, y en la columnaD el numero de tif, que son las claves de la base de datos
Es que sino no hay manera de trabajar con las dos tablas si no hay un campo de vinculo.
Vale, pues ya tengo en mi tabla de excel, y por lo tanto en la tabla de access vinculada(Hoja1), la tercera columna de Hoja1 que se llama F3 contiene la misma información que CodLote(que es la columna1 de Imagenes60) y es de tipo Numero. Y la cuarta columna de Hoja1, que se llama F4, contiene la misma información que la tercera columna de Imágenes 60, que se llama NombreArchivo y es de tipo Texto.
Bien,
Entonces quieres un código que te recorra las dos tablas y que ponga en la tabla Imagenes60 en el campo [Numero Albaran], lo que haya en el campo F2 de la tabla Hoja1, siempre y cuando:
Hoja1.F3 = Imagenes60.CodLote y Hoja1.F4 = Imagenes60.NombreArchivo
Eso es!
Pero siempre teniendo en cuenta, que una vez que lleve los datos a Imagenes60, pueda borrar mi hoja de Excel para volverla a rellenar y haciéndolo las veces que sean.
Muchas gracias
Bien,
UPDATE Hoja1 INNER JOIN Imagenes60 ON (Hoja1.F4 = Imagenes60.NombreArchivo) AND (Hoja1.F3 = Imagenes60.CodLote) SET Imagenes60.[Numero Albaran] = [F2];
Prueba esto
¿Este código es de Visual Basic verdad? ¿Lo tengo que meter en visual Basic o lo puedo ejecutar como una macro de Access?
Muchas gracias
No no, es SQL.
Lo que hace es cambiar el valor del campo "Numero Albarán" de Imagenes60 por lo que haya en F2 de Hoja1, siempre y cuando F3 y F4 coincidan con CodLote y NombreArchivo.
PERFECTO! Y perdona por no darme cuenta de lo de SQL, pero es que estoy con varios proyectos y me he confundido.
EL resultado es perfecto!
De verdad muchas gracias!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas