Renombrar los campos de una tabla importada Excel |
Responder |
Autor | |
Teruel
Nuevo Unido: 29/Marzo/2021 Localización: ALCAÑIZ Estado: Sin conexión Puntos: 3 |
Opciones de entrada
Gracias(0)
Enviado: 30/Marzo/2021 a las 19:55 |
Buenas tardes, primero me presentare y daré las gracias a todos los usuarios del foro porque antes de registrarme algunos temas me han aportado soluciones..., espero poder ayudar en lo posible..., voy al tema que me esta dando problemas...
Tengo que renombrar los campos de una tabla que importo desde EXCEL a ACCESS, el codigo no me da errores, pero el problema es que solo me actualiza el valor del ultimo campo de los ficheros de importación y como soy mas o menos novato en VBA, no tanto en lo que a ACCES se refiere..., no logro encontrar porque solo me actualiza el ultimo valor. Pego el codigo vba y a ver si alguien me puede decir el problema.... Private Sub Comando23_Click() 'Renombrar los campos de la tabla creada al importar, primero tenemos que encontrar el campo donde coincide con el nombre anterior en la tabla Empresa 'Defino la base de datos a usar Dim dbs As DAO.Database 'Defino los archivos de datos 1 y 2 para la tabla empresas rst2 y para la tabla de la importacion rst Dim rst As DAO.Recordset Dim rst2 As DAO.Recordset 'Defino la variable para recorrer los campos de la tabla importada y que me devuelva luego los nombre de campo Dim emp_camp As Long 'Defino la variable para establecer el nombre del campo que cada vez que se ejecuta for to Dim nom_emp_camp As String 'Defino variable para registrar el nombre del fichero importado segun el formulario actual Dim importa_excel As String 'Defino las variables para las consultas a los recordsets que establecere antes de ejecutar for to Dim mycondition As String Dim mycondition2 As String 'Establezco el nombre del archivo importado en la variable para llamarlo mas tarde importa_excel = Me.NOMARCHI 'Establezco las conciciones de los recordsets en funcion de los valores del formulario (nomarchivo = tabla importada de excel) (EMPRESA = al codigo de empresa dentro de la TABLA EMPRESAS, con el fin de que solo me devuelva una linea de registros y poder 'establecer la comparacion del valor del campo mycondition = "SELECT * FROM " & Me.NOMARCHI mycondition2 = "SELECT * FROM EMPRESAS WHERE CODIGO =" & Me.EMPRESA Set dbs = CurrentDb 'Defino los recordsets a utilizar Set rst2 = dbs.OpenRecordset(mycondition2, dbOpenSnapshot) Set rst = dbs.OpenRecordset(mycondition, dbOpenSnapshot) 'Paso por todos los campos para encontar coincidentes For emp_camp = 0 To rst.Fields.Count - 1 'Vuelvo a declarar el recordset rst ya que sino lo cierro si coinciden despues de encontrar la coincidencia me da error por no poder editar si la tabla esta abierta, ya que quiero modificar los nombres de los campos de la tabla importada. Set rst = dbs.OpenRecordset(mycondition, dbOpenSnapshot) 'comparo los campos de la tabla empresas donde previamente he establecido en determinados campos los nombres que corresponderan con la columna (campo) de la tabla importada y que luego utilizare para generar mi archivo de exportacion a otro programa If rst2.Fields(emp_camp).Value = dbs.TableDefs(importa_excel).Fields(emp_camp).Name Then 'cierro el recordset para evitar el errror de que esta abierto por otro proceso y poder modificar los nombres de los campos de la tabla rst.Close 'Declaro el nombre del campo que quedara establecido para cada for to nom_emp_camp = rst2.Fields(emp_camp).Name 'modifico el nombre en la tabla importada de excel dbs.TableDefs(importa_excel).Fields(emp_camp).Name = nom_emp_camp Else 'si no coincide no hago nada End If Next emp_camp 'Cierro la dbs y la rst2 para liberar memoria dbs.Close rst2.Close 'reseteo todo a nothing Set rst = Nothing Set rst2 = Nothing Set dbs = Nothing End Sub
Igual lo he enrevesado algo pero creo que se ve lo que pretendo... Gracias de nuevo a todos Saludos. TERUEL_SDF
|
|
Teruel!!! JEJEJE
|
|
acilu55
Asiduo Unido: 27/Septiembre/2011 Estado: Sin conexión Puntos: 214 |
Opciones de entrada
Gracias(1)
|
¿has probado enrevesarlo mas con
For emp_camp = 0 To rst.Fields.Count e interceptar el error al no haber mas campo? Así guardará también el último
|
|
Gracias a todos de antemano
|
|
Teruel
Nuevo Unido: 29/Marzo/2021 Localización: ALCAÑIZ Estado: Sin conexión Puntos: 3 |
Opciones de entrada
Gracias(0)
|
Gracias por tu respuesta al final me di cuenta que estaba liando conceptos y conseguí sacar el codigo...
Pego aqui la solucion de lo que queria hacer realmente. (aun asi puede que continue algo enrevesado) 'Renombrar los campos de la tabla creada al importar, primero tenemos que encontrar el campo donde 'coincide con el nombre anterior en la tabla Empresa 'Defino la base de datos a usar Dim dbs As DAO.Database 'Defino los archivos de datos 1 y 2 para la tabla empresas rst2 y para la tabla de la importacion rst Dim rst2 As DAO.Recordset 'Defino la variable para recorrer los campos de la tabla empresas para obtener el valor que luego comparare con la tabla importada Dim emp_camp As Field Dim valor_emp_camp As Variant 'Defino la variable para recorrer los campos de la tabla importada y que me devuelva luego los nombre de campo Dim camp_excel As Field Dim valor_camp_excel As Variant 'Defino la variable para establecer el nombre del campo que cada vez que se ejecuta for to Dim nom_emp_camp As String 'Defino variable para registrar el nombre del fichero importado segun el formulario actual Dim IMPORTA_EXCEL As String 'Defino las variables para las consultas a los recordsets que establecere antes de ejecutar for to Dim mycondition2 As String 'Establezco el nombre del archivo importado en la variable para llamarlo mas tarde IMPORTA_EXCEL = Me.NOMARCHI 'Establezco las conciciones de los recordsets en funcion de los valores del formulario (nomarchivo = tabla importada de excel) '(EMPRESA = al codigo de empresa dentro de la TABLA EMPRESAS, con el fin de que solo me devuelva una linea de registros y poder 'establecer la comparacion del valor del campo mycondition2 = "SELECT * FROM EMPRESAS WHERE CODIGO =" & Me.EMPRESA Set dbs = CurrentDb 'Defino los recordsets a utilizar Set rst2 = dbs.OpenRecordset(mycondition2, dbOpenSnapshot) 'Paso por todos los campos para encontar coincidentes For Each emp_camp In rst2.Fields 'Establezco la variable para el valor del campo de la tabla empresas val_emp_camp = emp_camp 'Anido la funcion de busqueda dentro de la anterior para que recorra para cada registro de empresas la tabla importada y sus campos For Each camp_excel In dbs.TableDefs(IMPORTA_EXCEL).Fields 'Establezco la variable del campo cada vez que lo recorre para luego usarlo en la comparacion valor_camp_excel = camp_excel.Name 'Comparo las dos variables y si coinciden le digo que renombre el campo en la tabla importada If val_emp_camp = valor_camp_excel Then nom_emp_camp = emp_camp.Name dbs.TableDefs(Me.NOMARCHI).Fields(valor_camp_excel).Name = nom_emp_camp End If Next camp_excel Next emp_camp 'Cierro rst2 para liberar memoria rst2.Close Set rst2 = Nothing |
|
Teruel!!! JEJEJE
|
|
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 |