Mejorando la Macro de copiar tablas de Access a Excel

En un post anterior os mostramos como copiar tablas de Access a Excel de forma rapida, evitando los problemas de usar copiar y pegar.

La Macro funcionaba bien, pero puede mejorarse de forma relativamente sencilla para que sea mas reutilizable.

1) La primera mejora es añadir la Macro al libro de Macros Personal, para que este disponible siempre que utilicemos Excel. Sino sabéis como realizarlo os recomiendo que veáis este post del blog de JDL Excel.

2) Reemplazar la entrada manual de la ruta y el nombre Access, mediante una ventana de selección de ficheros. Reemplazamos la instrucción

InputBox(“¿Ruta y nombre del fichero Access?”)

por

Application.GetOpenFilename(“Access (*.mdb), *.mdb”, , “Seleccionar fichero Access”)

3) Reemplazar la entrada manual del nombre de la tabla o consulta por un selector que obtenga un listado de tablas y consultas disponibles. Esto implica la creación de un pequeño formulario y crear una lista de selección. Dada su complejidad y para no complicar este post, este punto lo trataremos en breve en otro post, cuando este publicado incluiremos un enlace.

*) El resultado final a falta de incorporar las mejoras del punto 3. El siguiente código dentro del libro de Personal:

‘==========================================
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 = Application.GetOpenFilename( _
    “Access (*.mdb), *.mdb”, , “Seleccionar fichero Access”)

  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
‘==========================================

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: