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

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.
- Compartir respuesta


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
- Compartir respuesta
