Traspaso de datos de campos a registros

A ver si soy capaz de explicarme:

Dispongo de una excel con datos de empresas. Para cada empresa (fila) tengo unos números de expedientes en diferentes columnas: codigo1, codigo2, ... Codigo10.

A partir de esa excel estoy generando un access con tablas relacionadas donde ya tengo metidas todas las empresas, contactos, etc... Y me falta ahora meter los números de expediente.

Pero claro, tengo que pasar de un sistema: Empresa_pepito codigo1 codigo2 ... Codigo10

A una tabla donde tenga

Empresa_pepito codigo1

Empresa_pepito codigo2

...

Empresa_pepito codigo10

¿Cómo podría hacerlo de forma automática?

1 respuesta

Respuesta
1

Lo tienes que hacer con código.

Supongamos que la hoja de excel la tienes vinculada en access, a esta tabla la llamaré TablaExcel campos: Empresa, Campo1, Campo2 y Campo3

Tendremos otra tabla en access que llamaré Destino: campos: Empresa, Código

En el código tendremos que crear 2 recordset, uno para recorrer los registros de la tabla TablaExcel y otro para añadirlos a la tabla Destino. El código seria:

' Creamos las variables:

Dim db as Database

Dim rs1 as Recordset

Dim rs2 as Recordset

' Activamos la Base de Datos:

Set db=Currentdb

' Creamos los recordset:

Set rs1=db.openrecordset("Destino")

Set rs2=Db.OpenRecordset("Select * from TablaExcel")

' Recorremos con un bucle Do While ... Loop los registros de tablaexcel

Do while not rs2.Eof

' Añadimos el registro a la tabla Destino:

rs1.AddNew

rs1!Empresa=rs2!Empresa

rs1!Código=rs2!Campo1

rs1.Update

rs1.AddNew
rs1!Empresa=rs2!Empresa
rs1!Código=rs2!Campo2
rs1.Update

rs1.AddNew
rs1!Empresa=rs2!Empresa
rs1!Código=rs2!Campo3
rs1.Update

' Pasamos al siguiente registro de TablaExcel:

Rs2. MoveNext

' Cerramos el bucle

Loop

Me cuentas.

Muchísimas gracias.

Se ve clarísimo el algoritmo y espero aclararme con los nombres de los distintos objetos.

Lo que no se es dónde meter el código. Ten en cuenta que solo lo voy a usar una vez, importaré los datos y a partir de ahí trabajaré solo con el Access. No es que vaya a vincular permanentemente el Access con la hoja excel.

Lo puedes hacer en la pestaña módulos, creas uno nuevo y creas una función nueva:

Function ImportarExcel

End function

En medio de estas dos lineas es dónde tienes que escribir el código, después, con el cursor dentro del código, lo ejecutas pulsando, en la barra, en el botón Ejecutar (el de la flecha a la derecha)

Ok, ya lo tengo en su sitio, pero creo que me va a costar adaptarlo. Lo he puesto así, pero me da un error (comentarios sobre el código en mayúsculas).

' Creamos los recordset:

Set rs1 = db.OpenRecordset("Registros") ------- REGISTROS ES EL NOMBRE DE LA TABLA DONDE QUIERO METER LOS DATOS -------

Set rs2 = db.OpenRecordset("Select * from C:\aa\Miguel.xls") ------ AQUÍ HE PUESTO LA TRAYECTORIA AL ARCHIVO EXCEL Y AQUÍ ES DONDE ME DA EL ERROR. ME DICE QUE NO ENCUENTRA EL ARCHIVO C:\aa\Miguel.mdb -----

' Recorremos con un bucle Do While ... Loop los registros de tablaexcel

Do While Not rs2.EOF

' Añadimos el registro a la tabla Destino:

rs1.AddNew

rs1!Cliente = rs2!Empresa

rs1!Descripción = rs2!GESTION1

rs1.Update

rs1.AddNew

rs1!Cliente = rs2!Empresa

rs1!Descripción = rs2!GESTION2

rs1.Update

------------...... Así con todos de GESTION1 a GESTION10.......------------

' Pasamos al siguiente registro de TablaExcel:

rs2.MoveNext

' Cerramos el bucle

Loop

-------

Por favor dime lo que estoy haciendo mal, porque creo que será un par de tonterías y me resolverás un gran problema.

Muchas gracias por tu claridad y rapidez.

Alberto

En el Select no puedes llamar a una tabla excel, ya que no es formato access.

Lo que tienes que hacer es "vincular" o "importar" esa hoja excel a access. En la pestaña tablas ---> botón derecho ---> importar o vincular, de esta forma la hoja excel la transformas en tabla access, la llamas como quieras y es esa tabla la que tienes que poner en el Select

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas