agregar registros desde hoja de excel a access

Solo consultas sobre Bases de Datos y Tablas Dinámicas Excel.
Reglas del Foro 1. Antes de hacer tu pregunta intenta con el buscador de este foro (muchas preguntas ya fueron respondidas antes!)
2. Si haces una nueva pregunta, es muy recomendable que adjuntes el ejemplo Excel para poder comprenderla mejor!
3. Realiza tu pregunta de forma clara, explicando bien cada paso de lo que haces y tendrás más probabilidad de respuesta!

agregar registros desde hoja de excel a access

Notapor wilmersaz » 23 Dic 2017 12:18

Buen día para todos,

Estoy intentando agregar registros a una tabla de access desde excel. la idea es que por medio de un botón llame una macro que realice este proceso:

tengo un libro llamado "Libro1.xlsm", una hoja llamada "Hoja1", una base de datos en access llamada "mibase.accdb" y dentro de esta una tabla llamada "miTabla".

Agradecería su valiosa ayuda.
Avatar de Usuario
wilmersaz
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 11
Registrado: 18 Oct 2017 18:14
Ubicación: Colombia

Re: agregar registros desde hoja de excel a access

Notapor Cacho R » 23 Dic 2017 16:09

.
Hola! wilmersaz. Con lo siguiente:

Código: Seleccionar todo
With CreateObject("adodb.Connection")
  .Provider = "Microsoft.ACE.OLEDB.12.0"
  .Properties("Data Source") = ThisWorkbook.Path & "\miBase.accdb"
  .Open
  Sql = "INSERT INTO [miTabla] SELECT * FROM [Excel 12.0;DataBase=" & _
    ActiveWorkbook.FullName & "].[Hoja1$E1:F4]"
  .Execute Sql
  .Close
End With

puedes conseguirlo sujeto a las siguiente prevenciones:

- Base de datos: miBase.accdb (que está ubicada en la misma carpeta que se encuentra el libro Excel).
- Tabla Access receptora: miTabla (ya debe existir vacía o no).
- Libro Excel: el libro activo.
- Hoja en la que se encuentran los datos: Hoja1.
- Rango a transferir: E1:F4.
- Celdas E1:F1 contienen títulos. Estos títulos tienen que tener los mismos nombres que los campos respectivos de la tabla access (aunque pueden estar en otro orden).

¿Te sirve la idea?...
Saludos, Cacho R.
.
Avatar de Usuario
Cacho R
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 9745
Registrado: 23 Jun 2011 17:15
Ubicación: Buenos Aires

Re: agregar registros desde hoja de excel a access

Notapor wilmersaz » 26 Dic 2017 12:06

Cacho R escribió:.
Hola! wilmersaz. Con lo siguiente:

Código: Seleccionar todo
With CreateObject("adodb.Connection")
  .Provider = "Microsoft.ACE.OLEDB.12.0"
  .Properties("Data Source") = ThisWorkbook.Path & "\miBase.accdb"
  .Open
  Sql = "INSERT INTO [miTabla] SELECT * FROM [Excel 12.0;DataBase=" & _
    ActiveWorkbook.FullName & "].[Hoja1$E1:F4]"
  .Execute Sql
  .Close
End With

puedes conseguirlo sujeto a las siguiente prevenciones:

- Base de datos: miBase.accdb (que está ubicada en la misma carpeta que se encuentra el libro Excel).
- Tabla Access receptora: miTabla (ya debe existir vacía o no).
- Libro Excel: el libro activo.
- Hoja en la que se encuentran los datos: Hoja1.
- Rango a transferir: E1:F4.
- Celdas E1:F1 contienen títulos. Estos títulos tienen que tener los mismos nombres que los campos respectivos de la tabla access (aunque pueden estar en otro orden).

¿Te sirve la idea?...
Saludos, Cacho R.
.



Buen día Cacho R.

Si, me ha funcionado, pero ahora como lo realizo si la información del excel esta en una tabla, lo intento con lo siguiente pero no corre...

Código: Seleccionar todo
With CreateObject("adodb.Connection")
  .Provider = "Microsoft.ACE.OLEDB.12.0"
  .Properties("Data Source") = ThisWorkbook.Path & "\miBase.accdb"
  .Open
Sql = "INSERT INTO [miTabla] SELECT * FROM [Excel 12.0;DataBase=" & _
    ActiveWorkbook.FullName & "].[Hoja1.Range("Tabla1")]"
  .Execute Sql
  .Close
End With
Avatar de Usuario
wilmersaz
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 11
Registrado: 18 Oct 2017 18:14
Ubicación: Colombia

Re: agregar registros desde hoja de excel a access

Notapor Cacho R » 26 Dic 2017 14:49

.
Hola! wilmersaz. No estás entendiendo esta parte: Hoja1$E1:F4. Analicemos:

- Hoja1 es el nombre de la hoja (lo que un usuario Excel mira en la solapa de la hoja).
Vos tambien pusiste eso por lo que -en principio- esto estaría bien.

- Hoja1$ ¿Y el signo $?... Si no pones el signo "$" después del nombre de la hoja... ¡Todo te saldrá mal!
Recuerda que te estás comunicando con una base de datos y ella espera "un lenguaje específico".

- E1:F4 éste es el rango (incluyendo los títulos). Obvio que al poner Range("Tabla1") te has equivocado "feo" por dos cosas:

a) E1:F4 es un texto mientras que Range("Tabla1") es un objeto "rango". O sea: es cualquier cosa menos un texto.

b) La expresión Hoja1.Range("Tabla1") -otra vez- es un rango.
____________________

Entonces partes del modelo mostrado:
"].[Hoja1$E1:F4]"

- Empieza dividiendo el texto anterior en tres:
"].[Hoja1$" & "E1:F4" & "]"

- Como en lo de la hoja hay coincidencias entonces veamos el tema del rango: "E1:F4"

- Y esto lo consigues así:
Range("Tabla1"). Address(0, 0)
____________________

Resumiendo:
El equivalente a "].[Hoja1$E1:F4]" es

"].[Hoja1$" & Range("Tabla1"). Address(0, 0) & "]"
____________________

¿Se entiende?...
Saludos, Cacho R.
.
Avatar de Usuario
Cacho R
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 9745
Registrado: 23 Jun 2011 17:15
Ubicación: Buenos Aires

Re: agregar registros desde hoja de excel a access

Notapor Cacho R » 26 Dic 2017 14:54

Cacho R escribió:____________________

Resumiendo:
El equivalente a "].[Hoja1$E1:F4]" es

"].[Hoja1$" & Range("Tabla1"). Address(0, 0) & "]"
____________________

¿Se entiende?...
Saludos, Cacho R.
.

¡¡¡ Sorry !!!... Así como te lo pasé "me estoy comiendo" los títulos. Luego lo correcto es:

"].[Hoja1$" & Range("Tabla1").Range. Address(0, 0) & "]"

Ese ".Range" los incorpora...
Avatar de Usuario
Cacho R
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 9745
Registrado: 23 Jun 2011 17:15
Ubicación: Buenos Aires

Re: agregar registros desde hoja de excel a access

Notapor Cacho R » 26 Dic 2017 14:56

.
¡Qué día! (post navideño)... O sea:

Código: Seleccionar todo
"].[Hoja1$" & Range("Tabla1").Range.Address(0, 0) & "]"
Avatar de Usuario
Cacho R
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 9745
Registrado: 23 Jun 2011 17:15
Ubicación: Buenos Aires

Re: agregar registros desde hoja de excel a access

Notapor wilmersaz » 26 Dic 2017 16:48

Cacho R escribió:.
¡Qué día! (post navideño)... O sea:

Código: Seleccionar todo
"].[Hoja1$" & Range("Tabla1").Range.Address(0, 0) & "]"


Amigo Cacho R.

Muchas gracias por tu explicación, lo he realizado al pie de la letra pero me genera error en:

Código: Seleccionar todo
  Sql = "INSERT INTO [miTabla] SELECT * FROM [Excel 12.0;DataBase=" & _
      ActiveWorkbook.FullName & "].[Hoja1$" & Range("Tabla1").Address(0, 0) & "]"


ME APARECE ERROR "la instrucción insert into contiene el siguiente nombre de campo desconocido:'1'"

ya he verificado el nombre de los campos tanto de la tabla en excel como de la tabla en access, y ambas son exactamente iguales, no me explico que pueda estar haciendo mal...

y al cambiarla por:

Código: Seleccionar todo
  Sql = "INSERT INTO [miTabla] SELECT * FROM [Excel 12.0;DataBase=" & _
      ActiveWorkbook.FullName & "].[Hoja1$" & Range("Tabla1").Range.Address(0, 0) & "]"

ME APARECE ERROR "EL ARGUMENTO NO ES OPCIONAL" en .Range antes del adress.

adjunto archivo con el error generado.
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.
Avatar de Usuario
wilmersaz
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 11
Registrado: 18 Oct 2017 18:14
Ubicación: Colombia

Re: agregar registros desde hoja de excel a access

Notapor Cacho R » 26 Dic 2017 17:33

wilmersaz escribió:... ya he verificado el nombre de los campos tanto de la tabla en excel como de la tabla en access, y ambas son exactamente iguales...

al cambiarla por:

Código: Seleccionar todo
  Sql = "INSERT INTO [miTabla] SELECT * FROM [Excel 12.0;DataBase=" & _
      ActiveWorkbook.FullName & "].[Hoja1$" & Range("Tabla1").Range.Address(0, 0) & "]"

ME APARECE ERROR "EL ARGUMENTO NO ES OPCIONAL" en .Range antes del address.

¿Empiezo con tu error o con el mío?... (Jajajajajajaaj)

- ¡Empiezo con el mío! (que sigue siendo el mismo):

Código: Seleccionar todo
Range("Tabla1").ListObject.Range.Address(0, 0)

es decir que "me deglutí" al LIstObject.

- Y ahora vamos por el tuyo: ¿Cómo que revisaste bien?... Cliente no es lo mismo que Paciente.

Corrige esas dos cosas... ¡Y listo! (espero, Jejejjjjajajajaj)
Avatar de Usuario
Cacho R
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 9745
Registrado: 23 Jun 2011 17:15
Ubicación: Buenos Aires

Re: agregar registros desde hoja de excel a access

Notapor wilmersaz » 26 Dic 2017 18:22

Cacho R escribió:
wilmersaz escribió:... ya he verificado el nombre de los campos tanto de la tabla en excel como de la tabla en access, y ambas son exactamente iguales...

al cambiarla por:

Código: Seleccionar todo
  Sql = "INSERT INTO [miTabla] SELECT * FROM [Excel 12.0;DataBase=" & _
      ActiveWorkbook.FullName & "].[Hoja1$" & Range("Tabla1").Range.Address(0, 0) & "]"

ME APARECE ERROR "EL ARGUMENTO NO ES OPCIONAL" en .Range antes del address.

¿Empiezo con tu error o con el mío?... (Jajajajajajaaj)

- ¡Empiezo con el mío! (que sigue siendo el mismo):

Código: Seleccionar todo
Range("Tabla1").ListObject.Range.Address(0, 0)

es decir que "me deglutí" al LIstObject.

- Y ahora vamos por el tuyo: ¿Cómo que revisaste bien?... Cliente no es lo mismo que Paciente.

Corrige esas dos cosas... ¡Y listo! (espero, Jejejjjjajajajaj)


JAJAJAJAJAJA, que vergüenza esa "revisión tan exhaustiva" que realicé yo :oops:

pero bueno ya quedo lo que deseaba gracias a ti Cacho R... Muchas gracias por tu ayuda.

he aqui el lo que necesitaba.
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.
Avatar de Usuario
wilmersaz
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 11
Registrado: 18 Oct 2017 18:14
Ubicación: Colombia

Re: agregar registros desde hoja de excel a access

Notapor Cacho R » 26 Dic 2017 23:38

.
wilmersaz escribió:JAJAJAJAJAJA, que vergüenza esa "revisión tan exhaustiva" que realicé yo :oops:
Pero bueno ya quedo lo que deseaba gracias a ti Cacho R... Muchas gracias por tu ayuda.

¡Por fin!... Terminamos con los "efluvios" navideños (Jajjjjjajajajja)
Avatar de Usuario
Cacho R
Miembro Frecuente
Miembro Frecuente
 
Mensajes: 9745
Registrado: 23 Jun 2011 17:15
Ubicación: Buenos Aires


Volver a Bases de Datos y Tablas Dinámicas

¿Quién está conectado?

Usuarios navegando por este Foro: eavjperu y 3 invitados