Consulta desde Excel de Access

Estado
Cerrado para nuevas respuestas

Franklin 1712

Nuevo Miembro
Miembro
Hola. Necesito ayuda por favor.

Sé hacer consultas de bases de datos (access) desde excel, utilizando el asistente.

Pero en esta ocación quiero hacerlo con una macro que solo me importe las filas que coinsidan con un dato que esté referenciado a una celda de excel, es decir que la considencia que va abuscar la consulta sea "una palabra" (Dato) que yo coloque en una celda, es decir que la coincidencia sea dinámica (que se pueda cambiar) por eso digo que haga referencia a una celda, no sé realmente si se pueda.

Espero que me haya explicado bien y agradecería mucho la ayuda de los expertos.

Gracias.
 

rob1104

Super Moderador
Super Moderador
Hola, creo que esto te puede servir, cualquier duda postea de nuevo.

Macro de ejemplo que importa una query desde una base de datos usando Ado a una hoja de Microsoft excel
Instrucciones

Crear un nuevo libro. Añadir en un módulo el siguiente código fuente y la referencia a Ado . También especificar los siguientes datos a la subrutina "Query_Access_to_excel"
  • La ruta de la base de datos de Access
  • El nombre de la hoja de Excel
  • La consulta SQL
Código fuente
Insertar CODE, HTML o PHP:
Option Explicit

'\\ -- Incluir la referencia de ADO
'--------------------------------------------------------------------------
Sub Main()
    
    Dim sDBPath As String
    
    ' -- Ruta de la base de datos
    sDBPath = "C:\Archivos de programa\Microsoft Visual Studio\VB98\biblio.mdb"
    
    ' -- Ejecutar el procedimiento
    Call Query_Access_to_excel(sDBPath, "Sheet1", "Select * from Authors")
End Sub

Sub Query_Access_to_excel( _
    sBd As String, _
    sHoja As String, _
    sSQL As String)
    
     On Error GoTo error_handler
    

     Dim rs             As ADODB.Recordset      ' -- Variable recordset
     Dim sConnection    As String               ' -- Cadena de con .
     Dim Range_Destino  As Range                ' -- Variable de tipo Range
     Dim i              As Integer
        
     ' -- Bloquear la actualización de pantalla para acelerar el proceso
     Application.ScreenUpdating = False
    
     Set Range_Destino = ActiveWorkbook.Sheets(sHoja).Cells(1, 1)

     ' -- Asignar la Cadena de conexión
     sConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source= " & sBd & ";"

     ' -- Crear un nuevo recordset
     Set rs = New ADODB.Recordset
        
     ' -- traer los registros
     Call rs.Open(sSQL, sConnection, adOpenForwardOnly, adLockReadOnly)
        
     ' -- .. si hay registros
     If Not rs.EOF Then
          ' -- Nombre de los encabezados
          For i = 0 To rs.Fields.Count - 1
               Range_Destino.Offset(0, i).Value = rs.Fields(i).Name
          Next
          
          ' -- Copiar los registros
          Range_Destino.Offset(1, 0).CopyFromRecordset rs
          DoEvents
          ' -- Listo
          MsgBox "Importación Completa", vbInformation
     Else
          ' -- No hay datos
          MsgBox "No hay registros activos para importar", vbInformation
     End If
        
     ' -- Liberar el recordset y referencias
     If Not rs Is Nothing Then
        If rs.State = adStateOpen Then
            rs.Close ' -- close
        End If
        Set rs = Nothing
     End If
    
     If Not Range_Destino Is Nothing Then
        Set Range_Destino = Nothing
     End If
    
     ' -- Error --
    
     Exit Sub
error_handler:
     MsgBox Err.Description, vbCritical
End Sub
Saludos
 
Estado
Cerrado para nuevas respuestas
Arriba Pie