Automatizar la Importación de datos de Excel a Access

Siguiendo este código que encontré en una respuesta a un tema similar:

Private Sub Comando47_Click()
Dim XlsRuta As String
Dim miSql As String
'Indicamos la ruta del Excel
XlsRuta = "C:\Plantillas_Gestoria\DIRECTORIO_CACS_JUN16.xlsx"
'Importamos la hoja de cálculo a la tabla TExcel
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel7, "TExcel", XlsRuta, True
'Definimos la consulta de datos anexados
miSql = "INSERT INTO tabCacs (JefeCac, CorreoJefe, TelefonoJefe, SupervisorAnalista, CorreoSupervisor, Dirección)"
miSql = miSql & " SELECT TExcel.JefeCac, TExcel.CorreoJefe, TExcel.TelefonoJefe, TExcel.SupervisorAnalista, TExcel.CorreoSupervisor, TExcel.Dirección  FROM TExcel"
'Ejecutamos la consulta
DoCmd.SetWarnings False
DoCmd.RunSQL (miSql)
DoCmd.SetWarnings True
'Borramos la tabla TExcel
DoCmd.DeleteObject acTable, "TExcel"
'Lanzamos un mensaje de que todo ha ido bien
MsgBox "Datos anexados correctamente", vbInformation, "OK"
End Sub

De que forma podría hacerle en este caso:

La tabla a donde quiero imprtar los datos del excel tiene más campos que los que tiene el documento de excel. Ej. Mi tabla en Access se llama tbCacs y tiene los sig campos. Cac, TipoInmueble, JefeCac, TelJefe, CorreoJefe, SupervisorAnalista, CorreoAnalista, TelAnalista, Arredador, Vigencia, Dirección... (por nombrar algunos, ya que son más).

En cambio el documento de excel, solo tiene los campos de Cac, JefeCac, TelJefe, CorreoJefe, SupervisorAnalista, CorreoAnalista, Dirección. Como se pueden dar cuenta, mi excel tiene menos campos que la tabla de Access, por ende no coinciden tabla-excel al momento de hacer la importación .

Mi duda es como hacerle para que la información del excel se anexe solamente a los campos que corresponden. Ej. JefeCac>>>>JefeCac TelJefe>>>TelJefe ... Etc.. Etc.. Etc brincándose o anulando los campos que no correspondan al nombre del campo.

Espero puedan ayudarme ya que hice el código de arriba y no me agrega los datos a la tabla que quiero.

1 respuesta

Respuesta
2

En el Insert Into, en el primer paréntesis pones únicamente los campos a los que quiere importar, y en el SELECT siguiente pones solo los campos que quieres importar de la tabla auxiliar a la que vuelvas el contenido del excel

No comprendo bien lo que me quieres dar como solución Sveinbjorn,¿podrías explicarme mejor?

Te lo agradezco!

En esta parte del código:

'Definimos la consulta de datos anexados
miSql = "INSERT INTO tabCacs (JefeCac, CorreoJefe, TelefonoJefe, SupervisorAnalista, CorreoSupervisor, Dirección)"
miSql = miSql & " SELECT TExcel.JefeCac, TExcel.CorreoJefe, TExcel.TelefonoJefe, TExcel.SupervisorAnalista, TExcel.CorreoSupervisor, TExcel.Dirección  FROM TExcel"

cambias la SQL para usar sólo los campos que te interesan, según lo que te explicaba antes.

Por ejemplo, si solo quisieras importar a los campos JefeCac y CorreoJefe:

'Definimos la consulta de datos anexados
miSql = "INSERT INTO tabCacs (JefeCac, CorreoJefe)"
miSql = miSql & " SELECT TExcel.JefeCac, TExcel.CorreoJefe FROM TExcel

En el siguiente enlace tienes explicado (en ingles) cómo se construye una SQL del tipo INSERT INTO SELECT, y puedes practicar con la demo que tiene: http://www.w3schools.com/sql/sql_insert_into_select.asp 

Entonces si te entendí bien, y los campos que tengo en el Insert Into, son los que me interesan.

Otra pregunta: como puedo indicarle al código, ¿qué quiero qué se importe unicamente la información al registro que se esta mostrando en el formulario? Osea, que no actualice todo si no unicamente al registro que esta seleccionado y mostrado en la ventana del formulario

El código que tienes no "actualiza" los registros, sino que "añade" registros nuevos (por eso se usa la SQL INSERT INTO)

Si lo que quieres hacer es añadir registros del excel relacionados con el registro activo del formulario, has de añadir un WHERE al SELECT, indicar un campo de la tabla que sea único para cada registro e igualarlo al valor que tenga el formulario en ese momento.

Por ejemplo, si el campo Cac fuera único para cada registro, y además un número, sería así:

'Definimos la consulta de datos anexados
miSql = "INSERT INTO tabCacs (JefeCac, CorreoJefe)"
miSql = miSql & " SELECT TExcel.JefeCac, TExcel.CorreoJefe FROM TExcel WHERE Cac=" & Me.Cac

Si Cac fuera de texto, la parte del WHERE te quedaría:

... WHERE Cac='" & Me.Cac & "'"

Si quieres "actualizar" registros existentes, has de usar una SQL del tipo UPDATE (en el enlace anterior tienes explicaciones y ejemplos de este tipo)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas