Muchas veces tenemos la necesidad de copiar datos de una tabla o consulta Access a una hoja Excel. Este paso es sencillo, simplemente copiar y pegar. Copiamos los datos en Access y los pegamos en Excel, pero si el tamaño/cantidad de datos es grande esta operación puede dejar literalmente “tostado” nuestro ordenador durante varios minutos. Los minutos en los que se queda “tostado” variaran dependiendo de la cantidad de datos y la memoria RAM que tenga nuestro ordenador.
Afortunadamente existe una mejor solución para copiar datos de una tabla o consulta Access a Excel, es un poco más compleja, pero no mucho más. Vamos a crear una Macro y usar la función de VBA “Cells.CopyFromRecordset” para copiar tablas y consultas de Access en segundos.
Pasos:
1) Abrir Excel
2) Abrir el editor de Macros (Pulsar ALT+F11)
3) Copiar y pegar la siguiente Macro:
‘==========================================
Public Sub Copiar_Tabla_Access()
Dim oConexion As ADODB.Connection
Dim rsTabla As ADODB.Recordset
Dim sNombreTabla As String
Dim sNombreAccess As String
Dim i As Integer
sNombreAccess = InputBox(“¿Ruta y nombre del fichero Access?”)
If sNombreAccess <> “” Then
sNombreTabla = InputBox(“¿nombre de la tabla/consulta?”)
Set oConexion = New ADODB.Connection
oConexion.CursorLocation = adUseClient
oConexion.Open “PROVIDER=Microsoft.Jet.OLEDB.4.0;” & _
“Data Source=” & sNombreAccess & “;”
Set rsTabla = New ADODB.Recordset
rsTabla.Open “Select * From [" & sNombreTabla & "]“, _
oConexion, _
adOpenStatic
ActiveSheet.Cells.CopyFromRecordset rsTabla
ActiveSheet.Rows(“1:1″).Insert Shift:=xlDown
For i = 0 To rsTabla.Fields.Count – 1
ActiveSheet.Cells(1, i + 1).Value = rsTabla.Fields(i).Name
Next
rsTabla.Close
oConexion.Close
Set rsTabla = Nothing
Set oConexion = Nothing
End If
End Sub
‘==========================================
4) Guardamos los cambios.
5) Ahora ya podemos ejecutar la Macro para copiar los datos de una tabla o consulta Access en Excel. Abrimos la ventana de Macros en el Menú Herramientas > Macro > Macros (o pulsar ALT+F8).
6) Seleccionamos la Macro que hemos creado “Copiar_Tabla_Access” y pulsamos el botón “ejecutar“.
7) La Macro nos pedirá:
a) La ruta y el nombre del fichero Access, por ejemplo “c:\temp\miAccess.mdb”.
b) El nombre de la tabla o consulta, por ejemplo “miTabla”.
Ya hemos terminado.
Imprime este post
34 comentarios sobre Copiar datos de Access a Excel de forma rápida
Tío, como mola. Si hasta nos pasas el codigo!
como puede ser de excel a power point.?
La mejor opción que conozco para copiar una tabla de Excel a Power Point que respete los formatos cuando ajustas el tamaño es copiar la tabla y pegar como “Imagen (metaarchivo mejorado)” en Power Point. Lo malo es que no puedes editar los datos y cualquier cambio supone volver a tener copiar los datos desde el Excel.
Total mente de acuerdo contigo. De hecho ese método utilizo (muy tardado) Lo que estoy buscando es un macro que lleve mi selección de hoja de Excel a Power Point en automático como imagen si. y también busco un vinculo “dinámico” de Excel con mis datos de Power Point. para no estar rehaciendo mis presentaciones a cada rato. Imagínate, mis tablas de Excel la mas chica tiene cerca de 4000 renglones y 45 columnas. Estar copiando y pegando de mi tabla dinámica es un poco tardado. sugerencias… por favor… ayuda…
[...] Nos hemos mudado a http://www.xperimentos.com, puedes continuar leyendo el post en este enlace. [...]
[...] bajo licencia Creative Commons Attribution 3.0 License. « Copiar datos de Access a Excel de forma rápida "Decompilando" una base de datos Access para mejorar el rendimiento [...]
Al compilarlo me da un error ya que no me reconoce esto (ADODB.Connection) como un tipo de variable, ¿es una variable definida por el usuario puede ser?
El problema es que no tienes la librería de ADO enlazada. Para resolverlo:
En la ventana de edición de Visual Basic, tienes que ir a Herramientas-> Referencias.. y añadir la siguiente librería:
“Microsoft ActiveX Data Objects X.X Library”
Donde X.X sea la última versión que tengas en tu ordenador, normalmente 2.8
COMO PUEDO COPIAR UN RANGO DE CELDAS DE EXCELL A ACCESS PREVIA VERIFICACION DE QUE UNA REFERENCIA EXISTA EN LA BD.
SALUDOS
Hola Juninho,
Perdóname, pero no entiendo muy bien la pregunta.
Un saludo,
Ildapena
La idea es capturar la información en celdas en Excel y después copiar las información en la vista “hoja de datos” en Access. Tengo un formulario que muestra deshabilitado el cuadro de herramientas y en vista diseño no puedo insertar botones en el formulario en Access ni siquiera ver la tabla (para insertar la posibilidad de eliminar registro u otros botones) así que decidí que mejor capturare la información en celdas en Excel para poder corregir con facilidad o eliminar filas y al estar revisadas copiarlas y pegarlas en Access; ya sea para habilitar el cuadro de herramientas en un formulario protegido -supongo- o para copiar de Excel a Access les agradezco el apoyo.
Estimados SICKSAGUN y JUNINHO9
Perdonadme, pero no entiendo las preguntas. Creo que tenéis que entender que si queréis que os ayuden con un problema es importante que las personas entiendan el problema.
Sino dedicáis ni siquiera 5 minutos a describir vuestro problema y tratar de explicarlo correctamente (usando correctamente las mayúsculas, con saltos de línea en los párrafos, sin faltas de ortografía, dejando claro el problema) creo que no es justo que esperéis que alguien dedique 30 minutos a entender, tratar de resolver y explicar la solución a vuestro problema.
Siento la parrafada y ruego me disculpéis. Hasta ahora yo mismo corregía los mensajes y trataba de averiguar cual era el problema, pero me niego a volver a solucionar dudas de personas que escriben sus mensajes sin haberlos pensado y redactado dedicando algo más de un minuto.
Por último, también os ruego que las preguntas tengan que ver con el contenido del post para que sean útiles para todos, para preguntas genéricas existen foros que son lugares más adecuados que un blog. En cualquier caso, siempre y evidentemente si queréis que alguien os responda os recomiendo dedicar tiempo a explicar adecuadamente el problema e incorporar toda la información que consideréis relevante.
Un saludo,
Lcflores
¿hay alguna forma de modificar el access en modo diseño desde una macro en excel?. Es decir, que al ejecutar la macro para traer datos, pueda modificar las fechas desde la macro.
Gracias
Hola Mercedes,
No hay forma de modificar el código de una Macro de Access con una Macro de Excel. Sin embargo, si que puedes llamar a una Macro de Access pasándole parámetros desde Excel, de esta forma puedes lograr lo que quieres.
Un saludo,
Lcflores
muchas gracias. Lo voy a intentar.
Un saludo,
Mercedes
Hola,
En access 2003 existia una funcion para pasar informes directamente a word/excel, pero en la v.2007 solo aparece word, excel se muestra desabilitado.
¿como puedo pasar un informe a excel?. La opcion de copiar/pegar desde word no me es valida, porque pierde el diseño de columnas.
Gracias
Hola quiero decirle que su guía de estudio está muy interesante y se aprende mucho gracias por esa enseñanza.
Fijese yo tengo una base de datos llamada Membresía el objetivo de esta base de datos es llevar un control de la membresía de mi iglesia y darles su carnet el cuál hemos diseñado desde la base de datos a través de las etiquetas, pero debido a que al querer imprimir solamente 8 carnet no podía porque se iban todos los 570 que estaban en la base de datos entonces procedimos a ponerle un contador para que el usuario vaya limitando la impresión por bloques de 8 pero ahora el problema engorroso es que despues que imprime tiene que hacer una busqueda numero por numero en el contador para irlo limpiando y que quede libre para seleccionar los siguientes 8 carnet. Traté de hacer una consulta de actualización y que me pusiera el valor de cero pero no lo logré me da varios errores, talves usted me puede brindar alguna ayuda alrespecto
Gracias de antemano
Ivania
Estimada Ivania,
Cuando vas a imprimir informes o cualquier cosa en Access hay dos formas de realizarlo.
1) Informe: Permite total libertad de diseño e imprime la consulta que le facilites. En este caso, la consulta podría estar filtrada por un número de registro. Por ejemplo si a todos los carnet les das un número en la consulta podrías poner “numero_carnet = pideme_numero” . De esta forma Access buscaría la variable “pideme_numero” y al no encontrarla mostraría un cuadro de dialogo preguntando por el valor de la variable. Con esta misma técnica se podrían poner dos variables para indicar un intervalo de registros que se desean imprimir.
2) Formulario: A veces resulta util poder imprimir el diseño realizado en un formulario. Tan sólo es necesario dimensionar el formulario para que quede bien cuando se imprima. Lo malo es que sólo puede imprimirse un registro; lo bueno es que tienes un control total vía macros de lo que quieres que se imprima y las actualizaciones que quieres realizar antes/después de imprimir.
Espero haberte ayudado. Es una respuesta genérica, pero tu pregunta también era bastante genérica.
lcflores
Hola, como puedo descargar directamente las consultas que necesito sin que me pregunte sus nombres una a una? el caso es que tengo que descargar varias consultas de un mismo archivo access a distintas hojas de un mismo excel, hasta ahora he conseguido que me abra el access pero ahora no se como evitar que me pregunte una a una las consultas y que las descargando sucesivamente….sabría alguien ayudarme??
Gracias!!!
Hola Aliuskof,
(a) Remplaza la línea 1:
Public Sub Copiar_Tabla_Access()Por:
Public Sub Copiar_Tabla_Access( _sNombreAccess as String, _
sNombreTabla as String)
(b) Borra las siguientes líneas (4, 5, 8 y 10):
4 -
Dim sNombreAccess As String5 -
Dim sNombreTabla As String8 -
sNombreAccess = InputBox(”¿Ruta y nombre del fichero Access?”)10-
sNombreTabla = InputBox(”¿nombre de la tabla/consulta?”)(c) Antes de la línea que tiene el siguiente código:
ActiveSheet.Cells.CopyFromRecordset rsTablaAñade:
ThisWorkbook.Sheets.AddActiveSheet.Name = sNombreTabla 'Esto puede fallar con nombres extragnos
(d) Ahora crea una función que llame al SUB Copiar_Tabla_Access() de la siguiente forma:
Public Sub Una_Prueba()
Call Copiar_Tabla_Access("c:\miAccess","miTabla_1")
Call Copiar_Tabla_Access("c:\miAccess","miTabla_2")
Call Copiar_Tabla_Access("c:\miAccess","miTabla_3")
Call Copiar_Tabla_Access("c:\miAccess","miTabla_4")
Call Copiar_Tabla_Access("c:\miAccess2","miTabla_5")
Call Copiar_Tabla_Access("c:\miAccess2","miTabla_6")
Call Copiar_Tabla_Access("c:\miAccess2","miTabla_7")
End Sub
Lanza la macro
. Puede que haga un pequeño post con un poco más de detalle para que quede más claro.
Una_Prueba()y con esto problema solucionadoSuerte,
Lcflores
hola como estan?.
Tengo una necesidad, tengo que abrir un documento de excel desde una macro de access, para hacer unos calculos y pegar por valor la informacion, pero no lohe logrado.
Si me ayudan gracias!!!!!
hola
tengo un detalle quiero pasar informacion de una consulta de Acces a Excel pero indicandole un acondicion de un periodo por ejemplo
que la consulta extraiga los datos de la tabla pero los movimientos entre FechaInicial y FechaFinal y poderlos hacer con una macro .. como se puede hacer. lo he intentado directamente primero desce el Excel 2007 pero no me aparece la consulta que cree en Acces don de le dosy los parametros de la fechas
saludos
Para Manuel,
Busca en Google, como abrir un fichero Excel con VBA (entiendo que vas a crear una macro de Access). Es muy sencillo y hay multitud de ejemplos. Después simplemente utilizar los objetos del propio Excel para pegar valores.
App.Book(1).Sheet(1).Cells(1,1).Value = "Ejemplo"Para Favela,
No lo he probado, pero supongo que si en la macro del ejemplo sustituyes la siguiente línea:
rsTabla.Open “Select * From [" & sNombreTabla & "]“, _por una línea que incluya alguna condición WHERE en la consulta SQL debería dar el resultado que estas deseando. Por ejemplo,
rsTabla.Open “Select * From [" & sNombreTabla & "] Where [CampoFecha]=#" & miFecha & "#“, _Por último en algún lugar deberías reinicializar la variable miFecha. Por ejemplo, con un inputbox.
Un saludo,
lcflores
Hola a todos… Antes que nada dejenme felicitarlos por la gran ayuda que nos proporcionan.
Espero puedan ayudarme, Estoy haciendo una macro en Excel en donde me busca un dato en la hoja de calculo x y los resultados los pasa a la hoja de calculo y, ya la hice pero me tarda muchísimo tiempo. mi pregunta es ‘¿hay alguna forma de hacer esto utilizando ADO, DE EXCEL A EXCEL?
Se los agradecería mucho.
Ciao.
Hola Lulilani,
Esto no lo he hecho nunca, pero entiendo que se puede aplicar el método anterior. Veo dos opciones: 1) puedes crear un fichero Access y enlazar una nueva tabla al
Excel x, después simplemente utiliza el método descrito en el post; 2) ADO (ActiveX Data Objects) es una librería para el acceso a datos, como tal estoy seguro que puedes usar elExcel xcomo un origen de datos o sino crear un DSN (Data Source Name) que apunte alExcel x.Un saludo,
lcflores
Hola buenos dias, espero que me puedan ayudar, mi problema es cuando aplico la macro en la hoja de excel, me da el error 3706 en tiempo de ejecucion, donde me dice que no se encontro el proveedor especificado y me manda a esta instruccion en particular…
oConexion.Open “PROVIDER = Microsoft.Jet.OLEDB.4.0, ” & “DataSource = ” & sNombreAccess & “;”
Hola Oscar,
El problema en principio es sencillo, no tienes instalada la librería de acceso a datos de Microsoft MDAC (Microsoft Data Access Components). Para resolverlo, busca la última versión de MDAC en http://www.microsoft.com/downloads
Lcflores
Gracias por tu ayuda ilda, estuve buscando la ultima version de mdac y creo que es la 2.8, es la que tengo instalada, pero sigo sin poder ejecutar la macro porque me da el mismo error…
Hola Oscar,
Creo que el problema es de acceso a datos con ADO, pero si has comprobado que tienes instalado MDAC lo único que se me ocurre es que compruebes las siguientes 2 cosas.
1) En el editor de macros de Excel, en Herramientas -> Referencias… busca “Microsoft ActiveX Data Objects 2.8 Libray” si aparece es que efectivamente tienes instalado MDAC. Además en referencias deberías tener seleccionado: Visual Basic for Applications; Microsoft Excel XX Object Library; OLE Atomation; y Microsoft Office XX Object Library. (En Windows XP + Office 2003)
2) Si lo anterior es correcto, y aunque parezca inapropiado, comprueba la ruta en la que tienes el fichero Access y asegurate de introducirla correctamente cuando se solicita con el inputbox.
Un saludo,
LCFlores
Gracias por el apoyo, he comprobado la opcion 1 anterior y efectivamente tengo todo seleccionado, en la opcion 2 no me pide la ruta porque primero me da el error en tiempo de ejecucion, es donde me lleva a la instruccion…
oConexion.Open “PROVIDER = Microsoft.Jet.OLEDB.4.0, ” & “DataSource = ” & sNombreAccess & “;”
Saludos!!
Hola Oscar,
Añade en referencias la librería de ADO. En el editor de macros de Excel, en Herramientas -> Referencias… busca “Microsoft ActiveX Data Objects 2.8 Libray” y seleccionala.
Espero que con esto por fin funcione
Un saludo,
LCFlores
Buenos dias,
Ya estan seleccionadas estas librerias pero sigue sin funcionar, incluso ya me lleve el archivo a otra maquina que tiene las ultimas actualizaciones en office 2007 y aun asi no funciona. Hay forma de reemplazar estas librerias por otra instruccion??
Saludos!!
Hola.
Tengo un problema al tratar copiar y pegar el contenido de una consulta de Access a Excel, es una cantidad considerable de registros (aproximadamente 20,000) pero nunca habia tenido problema con eso. Siempre lo pegaba como “Text” usando Paste Special y lo hacia muy bien incluso sin tardarse, me podrian ayudar a saber a que se debe esto? y si saben la solucion me lo harían saber? lo necesito mucho en mi trabajo, se los agradecería bastante.
Un Saludo
Como comentario les digo que ya estoy exportando la consulta de Access a Excel, esa fue la solución que yo le dí al problema. Pero se me hace mas comodo copiar y pegar despues de correr una consulta. Espero que me puedan ayudar
Deja tu comentario sobre Copiar datos de Access a Excel de forma rápida
*Nota: Sólo se tendrán en cuenta los comentarios correctamente redactados y que estén relacionados con el tema de la entrada.RSS a los comentarios de esta entrada · TrackBack URI