Curso Macros y VBA Excel Udemy

viernes, 11 de noviembre de 2011

Curso Práctico Programación VBA Excel 2007: Importar Datos de Access, ADO. Sesión 03.






Saludos!!!!!!!

Volvemos con otra sesión dedicada a la realización del ejercicio práctico, que desarrollamos en el curso presencial, que imparto en Forem Navarra, dedicado a la programación en Excel 2007 con VBA.

En la sesión anterior, la segunda que dedicábamos a este ejercicio nos centramos en conseguir que al seleccionar un país en el cuadro combinado de la hoja “Analisis”, nos mostrara los datos de producción del país seleccionado.

En esta sesión continuamos donde lo dejamos y nos vamos a centrar en la siguiente tarea: Vamos a crear el código que se encargue de importar los datos de Access. Recordad que hasta esta sesión los datos que utilizábamos son los que yo os he dado en la hoja “Datos”

Para conseguir realizar la importación de datos utilizaremos ADO, ActiveX Data Objects. Estos objetos permiten que podamos acceder a datos que se encuentren almacenados en bases de datos externas. En este caso a una base de datos de Access.

En esta sesión conseguiremos que se importen los datos de una base de datos llamada “Produccion.accdb”. Esta base de datos estará situada en la misma carpeta en la que tenemos el libro de Excel en el que estamos escribiendo el código. Más adelante modificaremos este código para incluso dar la opción de seleccionar otra base de datos diferente, pero de momento lo hacemos así.

Una vez finalizada esta parte, dejaremos todo listo para la próxima sesión en la que ya ataremos todos los cabos sueltos que tiene ahora mismo el código que estamos realizando.


Todos mis vídeos son Gratis, pero si te gusta mi trabajo, puedes realizar una donación para que pueda continuar con este proyecto. Cualquier cantidad desde 1€/1$ es bienvenida. Gracias!!!!!!!!!!!!!!


Para seguir esta sesión podéis descargar los siguientes archivos que utilizo en el Vídeo.
Como siempre, aquí tenéis la información del vídeo, enlaces para poder verlo y comentarlo en el foro del Blog.

  • Nombre: Curso Práctico Programación VBA Excel 2007: Importar Datos de Access, ADO. Sesión 03.
  • Nivel: Avanzado.
  • Duración Total: 28m 41s.
  • Duración Vídeo 1: 28m 41s.

Vídeo 1 de 1.

Con la próxima sesión finalizaré temporalmente esta serie de sesiones dedicada al ejercicio y haremos un pequeño impás para dar paso a sesiones dedicadas a las otras temáticas que toco en el Blog, que las tengo muy abandonadas. Pasad buen fin de semana.

*Siguiente sesión*

47 comentarios:

  1. muy buenos los vídeos, que lastima que hayan quedado en la mitad. Saludos*

    ResponderEliminar
  2. Gracias, no te preocupes que se están cocinando...

    ResponderEliminar
  3. Saludos David, Primero felicitarte por estos buenos videos, Segundo Veraz tengo una Interrogante...Asi com el texbox de google que al escribir arroja una lista de sugerencias con palabras que se aserquen a lo que se esta escribiendo, esto mismo en el excel al momento de digitar codigo vba te brinda una lista de sugerencias qeu coninciden con el codigo que se esta escribiendo y en este ultimo me imagino que las sugerencias de codigo te brinda de la lista que tiene el vba almacenado. Bueno yo quisiera hacer lo mismo que al escribir en una celda se despliegue una sugerencias que coincidan con lo que estoy escribiendo esto de una lista de clientes que tengo. Se Podra nose pienso que tu tienes la respuesta. De antemano muchas gracias por la respuesta. Atentamente Cristian

    ResponderEliminar
  4. Hola

    Depende de lo que necesites en concreto se podría solucionar con validación de datos, sin macros. Esta herramienta ofrece esa posibilidad que estas comentando.

    Pero habría que ver como tienes los datos para saber si se puede solucionar así o hace falta VBA.

    Saludos.

    ResponderEliminar
  5. Gracias por la pronta respuesta y tienes razon y pienso q si hace falta VBA, te he enviado un correo a davidasurmendi@gmail.com, ahi te detallo con claridad el problema que tengo y confio mucho en que podras darle solucion, agradesco tu respuesta, te agradece.
    Cristian Laureano

    ResponderEliminar
  6. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  7. Hola David! Soy el primer Anónimo que publico acá. Estaré esperando ansiosamente la continuación de los vídeos, muy didácticos y lo mas importante entendibles; bien explicados.
    Saludos*

    ResponderEliminar
  8. Hola Crhistian

    Espero que para el Viernes esté lista, es ya una cuestión personal. Lo que me está costando hacer esta sesión.

    Saludos.

    ResponderEliminar
  9. Hola David.
    Solamente felicitarte por los videos, he leido mucho pero tus videos son los que mas me han ayudado.
    Sigue así crack!!!!!

    ResponderEliminar
  10. Gracias

    En un par de días la siguiente sobre este tema.

    Saludos.

    ResponderEliminar
  11. Hola David, soy ezequiel alvarez de argentina y tratando de buscar ayuda para hacer un trabajo encontre tu blog. La verdad que muy buenos los videos, son muy entendibles y ayudan bastante. En lo particular se los recomiendo a todos mis amigos que creo les puede servir para su laburo.
    Tengo un par de dudas, en este 3er. video explicas el codigo para importar datos desde access. En primer lugar, si en vez de extraer los datos desde una tabla quiero hacerlo de una consulta que cambio habría que hacerle?
    Y en segundo lugar, el codigo para exportar datos en forma constante desde excel a una tabla ya creada en access(con las mismas columnas que excel) varia mucho?o es mas o menos parecido?. En si lo que estoy tratando de hacer es eso y busque por internet codigos para hacerlo, pero los que me aparecen pintan muy complejos, ademas de que tengo que completarlos y todavia me pierdo un poco como para hacerlo y no me tire errores. Por eso te escribo, porque el codigo para importar era corto y sencillo.
    Desde ya muchas gracias y muchas suerte con el blog!
    Saludos. Ezequiel.

    ResponderEliminar
    Respuestas
    1. Hola Ezequiel

      El código que te pongo aquí hace lo mismo que el del vídeo pero extrae los datos utilizando una consulta de Access que se llama qryProduccion.

      Sub ImportarDatosProduccionAccess2()
      Dim DatosProduccion As New ADODB.Recordset
      Dim Conexion As New ADODB.Connection
      Dim Comando As New ADODB.Command
      Dim CaracteristicasConexion As String

      Application.ScreenUpdating = False
      HojaDatos.Select

      CaracteristicasConexion = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & ThisWorkbook.Path & "\Produccion.accdb"
      Conexion.Open ConnectionString:=CaracteristicasConexion

      Set Comando.ActiveConnection = Conexion
      Comando.CommandType = adCmdTable
      Comando.CommandText = "qryProduccion"
      Comando.Execute
      DatosProduccion.Open Comando

      If DatosProduccion.EOF = True Then
      MsgBox "No se han encontrado datos de producción en la base de datos.", vbInformation
      Else
      Range("A2").CopyFromRecordset Data:=DatosProduccion
      End If

      Conexion.Close
      Set Conexion = Nothing
      Set DatosProduccion = Nothing
      Set Comando = Nothing
      End Sub

      En cuanto a la segunda pregunta no te entiendo muy bien, si te refieres a importar registro por registro habría que cambiar un poco el código, en mis ejemplos mete todos los datos de golpe, no línea por línea.

      Saludos.

      Eliminar
    2. David, gracias por responder tan rapido.
      Mi segunda pregunta se refiere a si el codigo para exportar, en vez de importar como mostras en el ejercicio, varia mucho. Lo que yo necesito es exportar datos que se van agregando en una tabla en excel a una tabla en access. O sea la operacion inversa al ejemplo que mostras (excel a access).
      Desde ya muchas gracias.
      Saludos.

      Eliminar
    3. Vale

      En ese caso si que sería muy diferente. Lo que es la manera de conectarse y acceder a la base de datos se haría de la misma manera. Pero había que escribir mucho más código que para importar.

      Saludos.

      Eliminar
    4. Ok. Gracias. Voy a ver que puedo hacer al respecto. Por lo pronto con la ayuda de tus videos voy a mejorar las macros. Espero con ansias si tocas el tema de como exportar, je.
      Muchas gracias por todo. Saludos.

      Eliminar
    5. Hola denuevo je. Otra consulta. Esto es sobre el código para importar que explicas en el video. Como sería para el caso que el archivo de la base de datos de access estuviera en otra carpeta, la cual sería una carpeta compartida en red?

      Si me podes decir como seria en ese caso te lo agradeceria.
      Desde ya muchas gracias y saludos!

      Eliminar
    6. Hola

      Esta línea por ejemplo buscaría la base de datos en un ordenador llamado EQUIPODAVID que tiene una carpeta compartida llamada Documentos.


      CaracteristicasConexion = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=\\EQUIPODAVID\Documentos\Produccion.accdb"

      En mi caso funciona, pero no se si te dará problemas por tema de permisos en tu caso.

      Saludos.

      Eliminar
  12. David,
    Excelente como siempre.
    Saludos. Daniel Aguero.Chile.18-05-2012.

    ResponderEliminar
    Respuestas
    1. Muchas gracias!!!!!!!!!!!

      No te creas algunos días estoy muy espeso.

      Saludos.

      Eliminar
  13. Hola David, buenas tardes..
    Al tratar de identificar el objeto ADO por el pestaña HERRAMIENTAS opcion Referencias, me arroja el siguiente error:
    "Error en el acceso al registro del sistema"

    me puedes ayudar a resolverlo?

    Gracias de cualquier forma..

    Renzo Cardona
    Cartagena, Colombia

    ResponderEliminar
    Respuestas
    1. Bufffff, pues no se que puede ser, he mirado por Google y de este error dicen que es por la instalación de "Crystal Reports", pero no se si será tu caso o que puede ser.

      Saludos.

      Eliminar
  14. Hola David tengo una duda con la siguiente macro, me sale el siguiente error -2147904(80040e10) No se han especificado valores para algunos parámetros requeridos, yo creo qe tiene que ver con el string, o alguna longitud por parte de los caracteres, pero no le doy. Me resalta en amarillo la siguiente insttrucción:
    Conexion.Open ConnectionString:=CaracteristicasConexion
    DatosBASES.Open Source:=InstruccionSql, ActiveConnection:=Conexion

    Muchas Gracias por tu tiempo

    ResponderEliminar
    Respuestas
    1. Esas líneas parece que están bien, revisa la línea de la cadena de conexión y la de la instrucción SQL. La mayoría de errores que se marcan en las líneas que has puesto tu, vienen de líneas anteriores.

      Saludos.

      Eliminar
    2. Gracias, el error estaba unas líneas arriba.

      Eliminar
  15. Hola David, te molesto por lo siguiente, me sale el error de compilacion: "No se encontro el argumento con nombre" y esta marcada la siguiente linea
    ConnectionString:=

    En la ayuda, me sale que "Se especificó un argumento con nombre, pero no se definió el procedimiento para aceptar un argumento con ese nombre. "

    Desde ya te agradeceria tu ayuda.

    ResponderEliminar
    Respuestas
    1. Revisa la línea en la que se crea la cadena de conexión por que ahí tendrás algo mal.

      Saludos.

      Eliminar
  16. Hola David

    Tremendo Trabajo

    Tengo xp
    El editor de Visual Basic no reconoce ADODB
    despues de escribir As New solo aparece ADOX
    pero ese objeto no tiene los métodos que estás utilizando

    Un saludo

    ResponderEliminar
    Respuestas
    1. Gracias!!!!!

      Windows XP, hasta donde yo sé y ya hace mucho de eso no soportaba nativamente ADO por que no llevaba integrado los MDAC (Microsoft Data Access Components), creo que en la versión SP3 ya lo integraba. Intenta actualizar tu Windows XP o busca para instalar los MDAC 2.8.

      Es que ya hace tanto de Windows XP que no te puedo decir más.

      Saludos.

      Eliminar
  17. Hola David.
    Primero felicitarte por tu magnifica faena con estos video tutoriales.
    Ahora la duda, yo intento seguir el ejercicio pero adaptándolo a mi día a día, la base de datos que yo recibo a diario es un Excel en lugar de una de Access y utilizando el código del video adaptándolo a mi fichero me aparece un error en tiempo de ejecución de no se reconoce la base de datos, tengo que escoger alguna referencia diferente a Microsoft ActiveX Data o tendría que hacerlo de otra manera?
    Muchas gracias.

    ResponderEliminar
    Respuestas
    1. Hay que cambiar algunas cosas y es un poco jaleo. Yo no tengo preparado nada pero en estos enlaces puedes ver algo de información.

      http://www.xltoday.net/vba_ejemplos_excelaexcel.asp

      http://www.mvp-access.es/softjaen/articulos/excel/ado_dao_excel.htm

      Saludos.

      Eliminar
  18. Muchas gracias David, voy a mirarlo.

    Salu2.

    ResponderEliminar
  19. Hola!
    Soy D. Arias desde República Dominicana, espero en Dios que este bien y que te siga Bendiciendo e iluminando para ayudar a tantas personas como yo que ustilizamos este vía.
    David me interesa este curso VBA y estoy en el Video 3, pero este al momento de ejecución me presenta un error -2147467259(80004005) El nombre del origen de datos es demasiado largo.
    Puedes ayudarme, mi correo es artesisa@hotmail.com
    Gracias.

    ResponderEliminar
    Respuestas
    1. Mándame el archivo para que lo mire.

      Saludos.

      Eliminar
    2. Hola!
      Gracias, pero ya lo he arreglado, era un error de sintasis.

      Eliminar
  20. Buenas tardes David, en primer lugar felicitarte por el éxito que esta teniendo tu pagina, y por lo bien que esta explicado cada tutorial.

    Te escribo por que cuando introduzco el código de esta tercera clase no se que pasa que se me señala en amarillo el siguiente paso:
    conexion.Open ConnectionString:=caracteristicasconexion

    Me podrías ayudar....es que ya llevo un buen rato buscando el fallo y no lo encuentro(he revisado todo el código y esta ok)

    Muchas gracias david....

    ResponderEliminar
    Respuestas
    1. Mándame el archivo y te lo miro cuando pueda. Tiene que ser algún error de sintaxis.

      Saludos.

      Eliminar
    2. Ok David te lo mando a tu correro.

      Un saludo

      Eliminar
  21. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  22. Buenos dias david, te escribo de Madrid y estoy encantado con tus clases, muchas gracias.
    paso a comentarte un problema que tengo despues del ejercicio 3 de VBA 2007. todo esta correcto, no me da ningun error pero no me pasa los datos de acces.
    muchas gracias de nuevo

    ResponderEliminar
    Respuestas
    1. Hola

      Mándame el archivo y en cuanto pueda te lo miro.

      Saludos.

      Eliminar
  23. Hola David
    Gracias por tus conocimientos, son de gran ayuda.
    Tengo el siguiente error en este tutorial: "Error de compilación, no se ha definido el tipo definido por el usuario", y me marca la linea de crear la variable DatosProduccion como ADODB.Recordset
    Uso Excel 2010
    Un Saludo

    ResponderEliminar
    Respuestas
    1. Se me había pasado este mensaje. Puede ser que no hayas añadido la referencia a los objetos ADO en el proyecto. Revisa eso.

      Saludos.

      Eliminar
  24. Bueno...pues parece que con w 10 no se puede poner lo de Recordset....a fastidiarse

    ResponderEliminar
  25. Hola, buenas tardes..
    Lo felicito por sus videos, son increibles. He entido todo.
    En la clase 3, el código que ha colocado me funciona bien he depurado y ejecutado el codigo línea por línea, pero al ir a Excel no me regresa ningun registro. He habilitado las referencias ADO y le repito el código es esl mismo, no me marca error pero tampoco me regresa ningun dato.

    Como puedo solucionar esto.

    Estoy Utilizando Microsoft Excel y Access 2010.
    Agradezco mucho su atención.
    Saludos...!

    ResponderEliminar