Generar Reportes de Base de Access desde Excel usando SQL Query, VBA y ADO

Generar Reportes de Base de Access desde Excel usando SQL Query, VBA y ADO

TipVer curso completo Conectar Excel a Access usando VBA y ADO

En este tutorial voy a mostrarte cómo generar reportes en Excel en base a una Fecha inicial y una Fecha final. La información o la data proviene desde Access. Usaremos VBA usando conexión ADO. Este es el tercer video de una serie de tutoriales sobre cómo conectarnos de Excel a Access:

Microsoft ActiveX Data Objects (ADO)

ADO es uno de los mecanismos que habilita a las aplicaciones cliente para conectarse a distintos orígenes de datos y acceder y manipular la información o los datos. La conexión de las aplicaciones hacia los orígenes de de datos se hace mediante proveedores OLEDB, que para nuestro tutorial usaremos un proveedor para conectarnos a una Base de datos de Access.

Ver video Generar Reportes desde Excel con información de Access

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Qué es un Recordset

Es importante conocer el concepto de Recordset, ya que siempre que nos comunicamos con una Base de datos, sea Oracle, SQL, MySQL o Microsft Access, este concento siempre estará presente.

Un Recordset es una estructura de datos que se usa para almacenar información en una Tabla de una Base de datos o lo que devuelve una consulta o Query. El término Recordset se una en infinidad de lenguajes de programación y prácticamente sirve para dar de alta registros, así como eliminar y actualizar los mismos.

Activar Referencia en el IDE de Visual Basic para aplicaciones

Antes de escribir cualquier código para conectarnos a una base de datos mediante ADO es importante activar la referencia a la librería de ADO.

  • Abrimos el IDE de VBA usando Alt + F11.

  • Abrimos el menú Herramientas > Referencias.

  • Marcamos Microsoft ActiveX Data Objects 6.1 Library.

Activamos la referencia a Microsoft ActiveX Data Objects 6.1 Library (ADO).

Figura 1. Activamos la referencia a Microsoft ActiveX Data Objects 6.1 Library (ADO).

Base de datos Access y tabla Ventas

Para este tutorial usaremos la misma base de datos MiBase.accdb y la tabla Ventas. Generaremos un reporte en base a la columna Fecha y Estado o provincia.

Base de datos de Access y Tabla Ventas.

Figura 2. Base de datos de Access y Tabla Ventas.

Formulario para Generar reportes

Lo interesante de este Formulario es que mandaremos llamar a un Calendario personalizado desarrollado por mi amigo Andrés Rojas Moncada. Su Control de Calendario es extremadamente fácil de implementar en nuestros desarrollos.

  • En este video Andrés nos explica el funcionamiento de su calendario.

  • Descarga el control de calendario desde esta página: http://www.excelhechofacil.com/p/calendario.html.

  • Abrimos el archivo cCalendario.xlsm.

  • Ejecutar el editor de macros vba con [Alt] + [F11].

  • Ahora vamos a mover el módulo llamado ModuloCalendario y el formulario llamado frmCalendario a nuestro archivo donde queremos utilizar el calendario de Andrés.

Te puede interesar: Guía definitiva para el uso de calendarios en Excel.

Formulario de reportes y Control de Calendario.

Figura 3. Formulario de reportes y Control de Calendario.

Código VBA del Formulario

Nota: Es importante que la base de datos de Access se encuentre en la misma ruta de este archivo para que funcione esta macro. La base de datos tiene como nombre MiBase.accdb.

Option Explicit

'EXCELeINFO
'MVP Sergio Alejandro Campos
'http://www.exceleinfo.com
'https://www.youtube.com/user/sergioacamposh
'http://blogs.itpro.es/exceleinfo

Private Sub CommandButton1_Click()

Control1 = Me.TextBox1.Name
frmCalendario.Show

End Sub

Private Sub CommandButton2_Click()

Control1 = Me.TextBox2.Name
frmCalendario.Show

End Sub

Private Sub CommandButton3_Click()
Dim Conn As ADODB.Connection
Dim MiConexion
Dim Rs As ADODB.Recordset
Dim MiBase As String
Dim Query As String
Dim i, j
Dim Fecha1
Dim Fecha2
Dim Estado As String

MiBase = "MiBase.accdb"

Set Conn = New ADODB.Connection
MiConexion = Application.ThisWorkbook.Path & Application.PathSeparator & MiBase

With Conn
    .Provider = "Microsoft.ACE.OLEDB.12.0"
    .Open MiConexion
End With

Fecha1 = Me.TextBox1.Value
Fecha2 = Me.TextBox2.Value
Estado = Me.TextBox3.Value
Query = "SELECT * FROM Ventas WHERE [Fecha] >= #" & Fecha1 & "# AND [Fecha] <= #" & Fecha2 & "# AND [Estado o provincia] = '" & Estado & "' ORDER BY [Fecha]"

Set Rs = New ADODB.Recordset
Rs.CursorLocation = adUseServer
Rs.Open Source:=Query, _
ActiveConnection:=Conn

'Valir si la consulta devuelve resultados
If Rs.EOF And Rs.BOF Then
    'Borrar la conexión al Recordset
    Rs.Close
    Conn.Close
    'Borrar la memoria
    Set Rs = Nothing
    Set Conn = Nothing
    
    MsgBox "No hay resultados para la consulta", vbInformation, "EXCELeINFO"
    Sheets("Reporte").Range("A1").CurrentRegion.Clear
    Exit Sub
End If

Sheets("Reporte").Range("A1").CurrentRegion.Clear
For i = 0 To Rs.Fields.Count - 1

    Cells(1, i + 1).Value = Rs.Fields(i).Name

Next i

Sheets("Reporte").Range("A2").CopyFromRecordset Rs

'Cerrar la conexión
Rs.Close
Conn.Close
Set Rs = Nothing
Set Conn = Nothing
End Sub

Private Sub CommandButton4_Click()
Unload Me
End Sub

Descarga el archivo de ejemplo

Alta, Búsqueda y Reportes en Tabla de Access desde Excel con VBA.zip

Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.

También te podría gustar...