Exportar consulta Access con parámetros a Excel

Estoy tratando de exporta una consuta a excel con formato y no ejecuta la consulta

Public Sub exportar()
    Dim AppExcel As Object, rst As DAO.Recordset, SQL As String, Y As Long, A As Long
    On Error GoTo ManipularError
    SQL = SELECT CI_PASAPORTE,GRADO,SECCION,APELLIDOS,NOMBRES,CEDULA_ESCOLAR,SEXO,FECHA_NACIMIENTO,EDAD,AÑO_ESCOLAR FROM TB_HISTORICO WHERE (((GRADO)=[Introduzca El GRADO]) AND ((SECCION)=[Introduzca LA SECCION]) AND ((AÑO_ESCOLAR)=[Introduzca El AÑO_ESCOLAR]));"
"
    Set rst = CurrentDb.OpenRecordset(SQL, dbOpenForwardOnly)
    Set AppExcel = CreateObject("Excel.application")
    AppExcel.Workbooks.Add 'Crea un libro de trabajo nuevo y vacío
    With AppExcel.Sheets(1) 'Edito la hoja 1
        With .Range("A:E") 'Rango de columnas a las que dare formato
            .Font.Name = "Calibri" ' Tipo de letra
            .Font.Size = 9.5 'Tamaño de letra
            .ColumnWidth = 13 'Ancho de columna
        End With
        With .Range("A1:E1") 'Rango de fila a las que dare formato
            .Font.Size = 10 'Tamaño de letra
            .Font.FontStyle = "Bold" 'Estilo de letra(Negrita)
            .Interior.ColorIndex = 14 'Color de relleno de celda
        End With

End Sub

2 Respuestas

Respuesta
1

Antonio, permíteme explicarte por qué tu código (si lo que has puesto es el código completo) no ejecuta la consulta:

1º/ Y es la razón principal, porque no se lo indicas en ninguna parte. El código que has puesto se limita a abrir un recordset sobre una SQL, y luego a abrir un Excel y darle el formato señalado, pero en ningún momento le dices que te pase los datos del recordset a la hoja de excel, con lo que difícilmente te exportará nada...

2º/ El código (de nuevo tal como lo has puesto) está plagado de errores, así a "simple vista":

a) En la linea del "on error" llamas a una etiqueta "ManipularError" que no existe en el código => te dará un error.

b) una consulta parametrizada no la puedes abrir directamente usando CurrentDb.Openrecordset (te saltará error de "Pocos parámetros. Se esperaban 3"). Tienes que usar QueryDefs y Parameters para definirlos, establecerles el valor y abrir el recordset (https://docs.microsoft.com/es-es/office/client-developer/access/desktop-database-reference/parameters-collection-dao , y otra más https://www.oreilly.com/library/view/access-cookbook/0596000847/ch01s17.html)

c) Te falta un End With antes del End Sub

d) Te faltan las lineas de código para guardar y cerrar el excel, pues de lo contrario se te quedará abierto en segundo plano, pero no lo vas a ver en ningún momento.

Dicho esto, y por si la solución ofrecida por Antonio Malonso no te funciona o no lo hace como quieres (porque no tienes control sobre el formato de exportación), en la web de Neckkito tienes un ejemplo (http://neckkito.xyz/nck/index.php/ejemplos/18-codigo/177-exportar-a-hoja-existente-en-excel) y dos aportaciones (Informes JM y Export-Query) que te servirán de guía para lograr lo que te propones.

¡Gracias! ANTONIO MALONSO me sirvió de mucho tu codigo y ,Sveinbjorn El Rojo, mucha gracias por tus referencias y a los 2 gracias por tomarse un momento para ayudar a los que estamos empezando en este mundo

Respuesta
1

Antonio Mata. No soy experto en el tema, pero hice una aplicación en Visual con Acces... y exporto una consulta de impuestos a Excel. Tengo parámetros de fechas para hacer la consulta (FechaInicioImpuesto y FechaFinImpuesto). Mi código es sencillo, nada complicado, te lo dejo por si te sirve. Contame cómo te va.

Private Sub ConsultaImpuestoExcel_Click() 'Exporta a excel la consulta que da origen a Informe Impuesto Ventas
If Me.FechaInicioImpuesto = "" Or IsNull(FechaInicioImpuesto) Then
MsgBox ("Falta poner Fechas de Inicio del Reporte" & vbCrLf & "Primero defina DESDE cuando lo desea, luego click al botón correspondiente "), vbInformation, "FALTAN FECHAS de REPORTE"
Me.FechaInicioImpuesto.SetFocus
Exit Sub
End If
If Me.FechaFinImpuesto = "" Or IsNull(FechaFinImpuesto) Then
MsgBox ("Falta poner Fechas Hasta del Reporte" & vbCrLf & "Primero defina HASTA cuando lo desea, luego click al botón correspondiente "), vbInformation, "FALTAN FECHAS de REPORTE"
Me.FechaFinImpuesto.SetFocus
Exit Sub
End If
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "ConsultaImpuestoVenta", "C:\Mis registros\Impuestos\" & "ConsultaImpuestoVenta" & "-" & Format(Date, "dd-mm-yyyy") & ".xls", True
MsgBox "Exportación a MS Excel exitosa.", vbApplicationModal + vbInformation + vbOKOnly, "Danilo le informa"
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas