XperimentoS

Experiencias Profesionales…

Copiar datos de Access a Excel de forma rápida

Publicado por lcflores en 3rd Abril 2007

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”.

8) Ya hemos terminado.

Post relacionados

  • Mejorando la Macro de copiar tablas de Access a Excel
  • "Decompilando" una base de datos Access para mejorar el rendimiento
  • Transponer datos en Excel
  • Resumen avanzado con datos de diferentes hojas Excel
  • Obtener el número de serie del ordenador en Windows
  • 21 Respuestas en “Copiar datos de Access a Excel de forma rápida”

    1. ildapena Dice:

      Tío, como mola. Si hasta nos pasas el codigo! :)

    2. H. Dice:

      como puede ser de excel a power point.?

    3. lcflores Dice:

      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.

    4. H. Dice:

      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…

    5. Copiar datos de Access a Excel de forma rápida « XperimentoS Dice:

      […] Nos hemos mudado a http://www.xperimentos.com, puedes continuar leyendo el post en este enlace. […]

    6. XperimentoS » Archivo del Blog » Mejorando la Macro de copiar tablas de Access a Excel Dice:

      […] 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 […]

    7. josep Dice:

      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?

    8. lcflores Dice:

      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

    9. JUNINHO9 Dice:

      COMO PUEDO COPIAR UN RANGO DE CELDAS DE EXCELL A ACCESS PREVIA VERIFICACION DE QUE UNA REFERENCIA EXISTA EN LA BD.

      SALUDOS

    10. ildapena Dice:

      Hola Juninho,

      Perdóname, pero no entiendo muy bien la pregunta.

      Un saludo,
      Ildapena

    11. SICKSAGUN Dice:

      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.

    12. lcflores Dice:

      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

    13. mercedes Dice:

      ¿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

    14. lcflores Dice:

      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

    15. mercedes Dice:

      muchas gracias. Lo voy a intentar.

      Un saludo,

      Mercedes

    16. jvj Dice:

      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

    17. Ivania Dice:

      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

    18. lcflores Dice:

      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

    19. aliuskof Dice:

      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!!!

    20. lcflores Dice:

      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 String
      5 - Dim sNombreTabla As String
      8 - 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 rsTabla

      Añade:
      ThisWorkbook.Sheets.Add
      ActiveSheet.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 Una_Prueba() y con esto problema solucionado :-). Puede que haga un pequeño post con un poco más de detalle para que quede más claro.

      Suerte,
      Lcflores

    21. manuel Dice:

      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!!!!!

    Dejar un Comentario

    XHTML: Puedes usar estos tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>

     
    Cerrar
    Enviar por Correo