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í.
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*:
*Siguiente sesión*:
muy buenos los vídeos, que lastima que hayan quedado en la mitad. Saludos*
ResponderEliminarGracias, no te preocupes que se están cocinando...
ResponderEliminarSaludos 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
ResponderEliminarHola
ResponderEliminarDepende 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.
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.
ResponderEliminarCristian Laureano
Este comentario ha sido eliminado por el autor.
ResponderEliminarHola 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.
ResponderEliminarSaludos*
Hola Crhistian
ResponderEliminarEspero que para el Viernes esté lista, es ya una cuestión personal. Lo que me está costando hacer esta sesión.
Saludos.
Hola David.
ResponderEliminarSolamente felicitarte por los videos, he leido mucho pero tus videos son los que mas me han ayudado.
Sigue así crack!!!!!
Gracias
ResponderEliminarEn un par de días la siguiente sobre este tema.
Saludos.
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.
ResponderEliminarTengo 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.
Hola Ezequiel
EliminarEl 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.
David, gracias por responder tan rapido.
EliminarMi 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.
Vale
EliminarEn 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.
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.
EliminarMuchas gracias por todo. Saludos.
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?
EliminarSi me podes decir como seria en ese caso te lo agradeceria.
Desde ya muchas gracias y saludos!
Hola
EliminarEsta 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.
David,
ResponderEliminarExcelente como siempre.
Saludos. Daniel Aguero.Chile.18-05-2012.
Muchas gracias!!!!!!!!!!!
EliminarNo te creas algunos días estoy muy espeso.
Saludos.
Hola David, buenas tardes..
ResponderEliminarAl 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
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.
EliminarSaludos.
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:
ResponderEliminarConexion.Open ConnectionString:=CaracteristicasConexion
DatosBASES.Open Source:=InstruccionSql, ActiveConnection:=Conexion
Muchas Gracias por tu tiempo
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.
EliminarSaludos.
Gracias, el error estaba unas líneas arriba.
EliminarHola 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
ResponderEliminarConnectionString:=
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.
Revisa la línea en la que se crea la cadena de conexión por que ahí tendrás algo mal.
EliminarSaludos.
Hola David
ResponderEliminarTremendo 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
Gracias!!!!!
EliminarWindows 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.
Hola David.
ResponderEliminarPrimero 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.
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.
Eliminarhttp://www.xltoday.net/vba_ejemplos_excelaexcel.asp
http://www.mvp-access.es/softjaen/articulos/excel/ado_dao_excel.htm
Saludos.
Muchas gracias David, voy a mirarlo.
ResponderEliminarSalu2.
Hola!
ResponderEliminarSoy 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.
Mándame el archivo para que lo mire.
EliminarSaludos.
Hola!
EliminarGracias, pero ya lo he arreglado, era un error de sintasis.
OK, solucionado pues.
EliminarSaludos.
Buenas tardes David, en primer lugar felicitarte por el éxito que esta teniendo tu pagina, y por lo bien que esta explicado cada tutorial.
ResponderEliminarTe 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....
Mándame el archivo y te lo miro cuando pueda. Tiene que ser algún error de sintaxis.
EliminarSaludos.
Ok David te lo mando a tu correro.
EliminarUn saludo
Este comentario ha sido eliminado por el autor.
ResponderEliminarBuenos dias david, te escribo de Madrid y estoy encantado con tus clases, muchas gracias.
ResponderEliminarpaso 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
Hola
EliminarMándame el archivo y en cuanto pueda te lo miro.
Saludos.
Hola David
ResponderEliminarGracias 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
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.
EliminarSaludos.
no descargan los archivos!!
ResponderEliminarCreo que ya está todo arreglado ;)
EliminarSaludos.
Bueno...pues parece que con w 10 no se puede poner lo de Recordset....a fastidiarse
ResponderEliminarHola, buenas tardes..
ResponderEliminarLo 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...!