Cómo exportar una consulta paramétrica de access a excel?

Cuento con una consulta paramétrica que lista personas dependiendo de un codigoViaje. Deseo que al pinchar sobre un boton ejecute la consulta y tome como parámetro el codigoViaje que esté activo en el cuadro de texto.

Esto lo logré para imprimir un informe que depende de la consulta, pero ni idea de como hacerlo para exportar a excel esta consulta

2 respuestas

Respuesta
2

Suponiendo que el Código que tienes para exportar es el de esta otra pregunta: Cómo listar en un combo box todas las tablas y consultas de una base de datos en access 2010.

Lo que has de hacer es modificarlo para que te quede así:

Public Sub EnviarDatos(ParamArray nombreConsultas() As Variant)
On Error GoTo ControlarErrores
Dim Registros As Recordset
Dim ConsultaParam As QueryDef
Dim Campos As Field
Dim i As Integer
Dim appExcel As Object
Dim Hoja As Object
Dim Fila As Integer
Dim Columna As Integer
   Set appExcel = CreateObject("Excel.Application")
   appExcel.Application.Visible = False
   appExcel.Application.Workbooks.Add
    For i = 0 To UBound(nombreConsultas())
       Set Hoja = appExcel.Sheets.Add
       Hoja.Name = nombreConsultas(i)
       Set Registros = CurrentDb.OpenRecordset(nombreConsultas(i))
SolucionadoErrorParametro:
       Fila = 1
       Columna = 1
       For Each Campos In Registros.Fields
           Hoja.Cells(Fila, Columna) = Campos.Name
           Columna = Columna + 1
       Next
       Fila = 2
       Columna = 1
       While Not Registros.EOF
           For Each Campos In Registros.Fields
               Hoja.Cells(Fila, Columna) = Campos.Value
               Columna = Columna + 1
           Next
           Columna = 1
           Fila = Fila + 1
           Registros.MoveNext
       Wend
       Registros.Close
   Next
   appExcel.Application.Visible = True
   Set appExcel = Nothing
   Exit Sub
ControlarErrores:
   If Err.Number = 3061 Then
        Set ConsultaParam = CurrentDb.QueryDefs(nombreConsultas(i))
        For i = 0 To ConsultaParam.Parameters.Count - 1
            ConsultaParam.Parameters(i) = InputBox(ConsultaParam.Parameters(i).Name)
        Next i
        Set Registros = ConsultaParam.OpenRecordset()
        Resume SolucionadoErrorParametro:
   Else
        MsgBox "Error No: " & Err.Number & "; Description: " & Err.Description
   End If
End Sub

Los recordsets sobre consultas parametrizadas se cargan de forma distinta, pues previamente has de pararle los parámetros.

Básicamente lo que hice fue modificarle el control de errores, y si se encuentra con una consulta parametrizada, te pide los parámetros para cargar el recordset.

Te subo un ejemplo, para que lo veas más claro: http://www.filebig.net/files/Ld47YuKNE4 

OK todo  bien hasta ahí. solo tuve que modificar el número de error que era el mismo, en mi caso fue el 1004.. tiene alguna explicación sencilla esto?

Ahora deseo algo más específico, que al final es lo mismo.

En ves de seleccionar de una lista en un cbx, quiero que ya el boton sepa cuál es la consulta pues va a ser una sola "listadoX", y el parámetro lo tome de una caja de texto que se encuantra en el formulario, "código". El objetivo es que va a ir cambiando el códido mientras me mueva en los registros y cuando vea el que quiero exportar, pincho el botón, ejecuta la consulta que necesita el parámetro código, y ya sepa que tiene que tomarlo de esa caja de texto.

Analizando lo que enviaste, creo que puede ser con un módulo aparte en el la descripción de errores decirle que tome como parámetro la caja de textoX... gracias saludos..

Si quieres exportar sólo una consulta concreta, no te hace falta tener el procedimiento del módulo, puedes poner en el código del botón el código del procedimiento directamente, eliminando las referencias a los parámetros que le pasabas antes, y poniendo en su lugar el nombre de la consulta.

Además, si la consulta que va a exportar tiene un único parámetro, que cogerá el valor del cuadro de texto, no te hace falta ponerlo en el control de errores.

En resumen, que el código te quedaría así:

Private Sub BotonExportar_Click()
On Error GoTo ControlarErrores
Dim Registros As Recordset
Dim ConsultaParam As QueryDef
Dim Campos As Field
Dim i As Integer
Dim appExcel As Object
Dim Hoja As Object
Dim Fila As Integer
Dim Columna As Integer
   Set appExcel = CreateObject("Excel.Application")
   appExcel.Application.Visible = False
   appExcel.Application.Workbooks.Add
   Set Hoja = appExcel.Sheets.Add
   Hoja.Name = nombreConsultas(i)
   Set ConsultaParam = CurrentDb.QueryDefs("listadoX")  'Aquí el nombre de la consulta
    ConsultaParam.Parameters(0) = Me.codigo  'Aqui el nombre del campo
    Set Registros = ConsultaParam.OpenRecordset()
    Fila = 1
    Columna = 1
    For Each Campos In Registros.Fields
        Hoja.Cells(Fila, Columna) = Campos.Name
        Columna = Columna + 1
    Next
    Fila = 2
    Columna = 1
    While Not Registros.EOF
       For Each Campos In Registros.Fields
          Hoja.Cells(Fila, Columna) = Campos.Value
          Columna = Columna + 1
        Next
        Columna = 1
        Fila = Fila + 1
        Registros.MoveNext
     Wend
     Registros.Close
   appExcel.Application.Visible = True
   Set appExcel = Nothing
   Exit Sub
ControlarErrores:
   MsgBox "Error No: " & Err.Number & "; Description: " & Err.Descrip

Al depurar me dice que no se ha definido sub o function

y me subraya: nombreConsultas

He tratado interpertar que puede ser pero... no doy con ello.

Bueno espero esté bien esto:

Puse Dim nombreConsultas As Variant

Ya no me da el error, pero ahora cuando pincho en el botón me dice:

Error 438... El objeto no admite esta propiedad o método y me subraya:

 MsgBox "Error No:" & Err.Number & "; Description: " & Err.Descrip

Lo de nombreConsultas se me coló a mí al pegar el código.

Lo que has puesto tu (Dim nombreConsultas as variant) sobra, bórralo

Cambia la linea Hoja.Name=NombreConsultas(i) por esta otra:

Hoja.Name= "Nombre que le quieras dar a la hoja de excel"

En la línea del control de errores no te tendría que dar ningún error, porque es la que tenías en el código original.

Respuesta
1

Dariel: En éste enlace tengo un ejemplo que te puede servir.

http://www.mediafire.com/download/dccr9io7dy8irsl/RepuestosPXR_Excel.rar 

Y éste otro.

http://www.mediafire.com/download/ikt3m3hf6uk6pcq/AccessExcelEleccionFichero.rar 

Mis saludos >> Jacinto

Gracias Jacinto.

No lo veo aun, primeramente inserté el módulo, y transcribí el código para el botón, y el código para lo que yo llamaría exportar el fichero, no puedo hacer más arreglos pues el único error que me da es el mismo que da en el fichero que enviaste "El fichero excel está abierto..."

Yo tengo un modulo que también copié de algún lugar, y me funciona perfectamente, selecciono la consulta de un cbx donde me aparecen todas, y se exportan bien, pero el problema es con las paramétricas, que en ves de exportarlas me dice: "Error 1004 Ha escrito un nombre no válido para una hoja o gráfico ..."

Supongo falta algo que si es paramétrico pregunte por el dato

Saludos..

Ariel: Refiriéndome al segundo Ejemplo, que es el que te da la Opción de elegir Nombre, acabo de probarlo y me hace el proceso sin errores.

Puede ocurrir que con alguna de las maniobras de apertura, el Fichero esté realmente abierto en modo oculto o la Aplicación de Excel.

Comprueba en el Administrador de Tareas.

Click con el Botón derecho del Mouse en la barra de tareas, y en un menú emergente que te sale eliges esa posición. Desde allí puedes cerrar el proceso abierto. Mis saludos >> Jacinto

Hola Jacinto, estoy probando el fichero que descargué y me sigue dando el mismo problema que está abierto el fichero, y excel está cerrado completamente, verifiqué los procesos. Si a usted le funciona pruebe ponerle un parámetro a al consulta y ver a la hora de exportar que pasa... saludos. sigo sin resolver el problemas.

Gracias..

Dariel: Con el fin de reproducir el fenómeno tal como a ti te ocurre y basándonos en el ejemplo de AccessExcelEleccionFichero, dime por favor que parámetros tu le pones a la consulta QryComisiones que te provoca el error. Así yo pruebo lo mismo. Saludos >> Jacinto

El problema es que me sigue dando el mismo problema de que ya el fichero está abierto, por lo tando no he podido hacer pruebas sobre el,  yo más bien le pedía como a usted le funciona, le pusiera un parámetro a su consulta, mi parámetro es en un campo de texto "codigo"

Logré de todas formas exportar la consulta paramétrica, modificando un modulo que tenía anterior como le había dicho antes, ahora lo estoy haciendo más específico para otra situación parecida..Gracias

Dariel: Te pongo el enlace con la BD comentada, y con un Formulario, que tiene el parámetro de la consulta.

Por costumbre, casi nunca pongo los parámetros en la casilla de Criterios y normalmente los externalizo.

http://www.mediafire.com/download/asriwuixf8gcja0/AccessExcelEleccFicheroYParam.rar 

Aunque por el código está claro, hago énfasis en que lo que exportamos no es la Consulta en sí. Lo que exportamos es el RecorsetClone del Formulario.

Espero que ahora ruede. Saludos >> Jacinto

¡Gracias! No me resolvió el problema, porque precisamente quería exportar una consulta completa, pero me dio idea para algo que tenía dudas como hacer. Gracias por el tiempo empleado en la solución!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas