Exportar una consulta de access a excel, guardarla y abrirla
El tema es el siguiente: tengo una macro en access que me exporta una consulta a excel (xls). El problema es que cada vez que la ejecuto me abre la ventana de que nombre darle y donde guardarla. Yo lo que quería es que la guardara directamente siempre en la ruta que tiene por defecto, y me abriera directamente el excel. ¿Es posible?
3 respuestas
![Eduardo Pérez Fernández](http://blob.todoexpertos.com/avatars/sm/eperezfer.png?v=57)
Pruebe con este código
DoCmd.OutputTo ObjectType:=acOutputQuery, ObjectName:="qry_clientes", OutputFormat:=acFormatXLS, _ Outputfile:=Ruta & "\Exportar_Consulta.xls", autostart:=True
Cambie qry_clientes por el nombre de su consulta y Exportar_Consulta.xls por el nombre que quiere dar al archivo de Excel. Si va a exportar muchas filas cambie xls por xlsx.
![Eduardo Pérez Fernández](http://blob.todoexpertos.com/avatars/sm/eperezfer.png?v=57)
Disculpe me faltó incluir la ruta, adicione al comienzo esta línea
'Declaramos la variable ruta Dim Ruta As String 'Asignamos la ruta de Access a la variable Ruta Ruta = Application.CurrentProject.Path DoCmd.OutputTo ObjectType:=acOutputQuery, ObjectName:="qry_clientes", OutputFormat:=acFormatXLS, _ Outputfile:=Ruta & "\Exportar_Consulta.xls", autostart:=True
![Eduardo Pérez Fernández](http://blob.todoexpertos.com/avatars/sm/eperezfer.png?v=57)
Este ejemplo le sirve para que lo adapte a sus necesidades, contiene código VBA
Este formulario recoge todas las consultas de la base de datos y permite elegir si incluye los encabezados y si abre Excel después de exportar. Consta de un procedimiento a nivel de formulario, código en el evento Al abrir del formulario y el código del botón exporta consulta.
Archivo de Excel con encabezado
Archivo de Excel sin encabezado
CÓDIGO DEL EVENTO AL ABRIR
Private Sub Form_Open(Cancel As Integer) Dim querys As QueryDef For Each querys In CurrentDb.QueryDefs If Left(querys.Name, 1) <> "~" Then Me.cboConCodigo.AddItem (querys.Name) End If Next End Sub
CÓDIGO DEL BOTÓN EXPORTAR CONSULTA
Private Sub Exportar_Consulta_Click() On Error GoTo hay_error 'Declaramos la variable ruta Dim Ruta As String If IsNull(Me.cboConCodigo) Then MsgBox "Debe seleccionar al menos una consulta", vbInformation, "Le informo.." Me.cboConCodigo.SetFocus Exit Sub End If 'Asignamos la ruta de Access a la variable Ruta Ruta = Application.CurrentProject.Path If Me.opcAbrir = 1 And Me.opcion = 1 Then DoCmd.OutputTo ObjectType:=acOutputQuery, ObjectName:=Me.cboConCodigo, OutputFormat:=acFormatXLSX, _ Outputfile:=Ruta & "\" & Me.cboConCodigo & ".xlsx", AutoStart:=True ElseIf Me.opcAbrir = 1 And Me.opcion = 2 Then DoCmd.OutputTo ObjectType:=acOutputQuery, ObjectName:=Me.cboConCodigo, OutputFormat:=acFormatXLSX, _ Outputfile:=Ruta & "\" & Me.cboConCodigo & ".xlsx" End If If Me.opcion = 2 Then Call retira_fila(Ruta & "\" & Me.cboConCodigo & ".xlsx") Shell ("Explorer " & Ruta & "\" & Me.cboConCodigo & ".xlsx"), vbMaximizedFocus End If MsgBox "El archivo se ha creado.", vbInformation, "Exportar Consulta" hay_error_exit: Exit Sub hay_error: MsgBox Err.Description, vbCritical, "Exportando Excel" Resume hay_error_exit End Sub
CÓDIGO DEL PROCEDIMIENTO RETIRA_FILA
Sub retira_fila(miquery As String) On Error GoTo Err_Borra_fila Dim xlApp As Excel.Application Dim wb As Excel.Workbook Dim ws As Excel.Worksheet Dim archivo As String archivo = miquery Set xlApp = CreateObject("Excel.Application") Set wb = xlApp.Workbooks.Open(archivo) Set ws = wb.Sheets(1) ws.Cells(1, 1).EntireRow.Delete wb.Save Err_Borra_fila_exit: 'cierra Excel wb.Close savechanges:=False xlApp.Quit Set xlApp = Nothing Set wb = Nothing Set ws = Nothing Exit Sub Err_Borra_fila: MsgBox Err.Number & ", " & Err.Description, , "Error" Resume Err_Borra_fila_exit End Sub
No utilice Application.FollowHyperlink, es un desastre recibirá mensajes como este.
Esto es para los que nos gusta la "Enciclopedia Británica" como dicen y para hacer las cosas bien. Si quiere el ejemplo lo puede solicitar a [email protected] favor en el asunto anotar la consulta.
![Eduardo Pérez Fernández](http://blob.todoexpertos.com/avatars/sm/eperezfer.png?v=57)
Acá le dejo una versión mejorada para escoger la carpeta de destino y en nombre del archivo de destino.
Pueden solicitarla a [email protected] favor en el asunto anotar "Quiero la herramienta para exportar consultas"
![Andrés Dopigol](http://blob.todoexpertos.com/letters/A_11_48.png?v=1)
Este lo probé y funciona bien, pero se ralentiza bastante la apertura del archivo. Gracias de todas formas. El otro no lo probé pero tiene buena pinta también.
![Eduardo Pérez Fernández](http://blob.todoexpertos.com/avatars/sm/eperezfer.png?v=57)
Realmente no le probado con un volumen considerable de registros ¿Cuántos registros tiene en la consulta?
![Eduardo Pérez Fernández](http://blob.todoexpertos.com/avatars/sm/eperezfer.png?v=57)
La falta de cultura del inexperto la idea es ofrecer alternativas más funcionales vuelvo y repito lo que el propone funciona pero no es la forma de trabajar, para hacer herrmamientas se requiere código. Concluyendo el usuario es quien determina que camino a seguir.
![Eduardo Pérez Fernández](http://blob.todoexpertos.com/avatars/sm/eperezfer.png?v=57)
No lo digo yo lo dicen muchos programadores, mire este link Follow hyperlink from string | Access World Forums (access-programmers. Co. Uk)
Y este de Allen Browne autoridad mundial en Access Microsoft Access tips: Opening hyperlinks (allenbrowne.com)
Aprovecho la traducción automática para presentarle lo que dice Allen Browne: (Texto en cursiva)
¿Por qué un reemplazo?
FollowHyperlink puede ser frustrante:
- Las advertencias de seguridad pueden bloquearlo o advertirle que no abra el archivo (según el tipo de archivo, la ubicación, la versión de Windows, los permisos y las directivas).
- Los archivos no se abren si sus nombres contienenalgunos caracteres (como # o %.)
- Los errores se generan si un enlace no se abre, por lo que cualquier rutina que lo llame debe tener un manejo de errores similar.
GoHyperlink aborda esas frustraciones:
- Precede a "file:///" para evitar las advertencias de seguridad más comunes.
- Maneja los caracteres especiales de manera más inteligente.
- Los errores se manejan dentro de la rutina. Compruebe el valor devuelto si desea saber si se abrió el enlace.
No puede resolver estos problemas por completo:
- Si el administrador de red no permite que los hipervínculos se abran en absoluto, no se abrirán.
- Si un nombre de archivo contiene dos caracteres #, se entenderá como un hipervínculo. Del mismo modo, si un nombre de archivo contiene el carácter % seguido de dos dígitos hexadecimales válidos (por ejemplo, Studetn%50.txt), se interpretará como un carácter preescolado en lugar de tres caracteres literales.
Estas son limitaciones relacionadas con HTML. Pero experimentará estos problemas con mucha menos frecuencia que con FollowHyperlink, que se levanta cada vez que encuentra una de estas secuencias.
Así que el ignorante sigue insistiendo en el uso de FollowHyperlink, en el comienzo de mis respuestas fui claro la llamada de FollowHyperlink sobra porque si observa autostart es True, en este caso se abrirá automáticamente Excel.
DoCmd.OutputTo ObjectType:=acOutputQuery, ObjectName:="qry_clientes", OutputFormat:=acFormatXLS, _ Outputfile:=Ruta & "\Exportar_Consulta.xls", autostart:=True
- Compartir respuesta
![](/content/images/user_nophoto_small.png)
![Julián González Cabarcos](http://blob.todoexpertos.com/avatars/sm/icue.jpg?v=13)
Puedes hacerlo de varias formas, por lo que vamos a suponer. Tengo una consulta Consulta1
Y quiero guardarla como Excel en una ruta
c:\users\gonza\documents\borrar\ejemplo.xlsx
Tengo un formulario con un botón, aunque podría ser en cualquier otro evento
Si lo pulso
El código del botón es
Private Sub Comando23_Click() DoCmd.OutputTo acOutputQuery, "Consulta1", "ExcelWorkbook(*.xlsx)", "C:\users\gonza\documents\borrar\ejemplo.xlsx", False, "", , acExportQualityPrint Application.FollowHyperlink "C:\users\gonza\documents\borrar\ejemplo.xlsx" End Sub
También podrías usar
DoCmd.TransferSpreadsheet acExport...
Por lo que sería conveniente saber como tienes construido el formulario.
![Andrés Dopigol](http://blob.todoexpertos.com/letters/A_11_48.png?v=1)
El código funciona perfectamente pero es como dice @eduardo Pérez salta el aviso de problema de seguridad. ¿algo para remediarlo?
![Julián González Cabarcos](http://blob.todoexpertos.com/avatars/sm/icue.jpg?v=13)
No le hagas caso a Eperezfer, nació tonto y no ha evolucionado nada. Probablemente el problema te surja por las ubicaciones de confianza. Mira la imagen
Como yo me fío de mi ordenador tengo puesto todo él como ubicación de confianza. Pero puedes pulsar Agregar nueva ubicación y seleccionar la carpeta donde quieres guardar el archivo Excel.
- Compartir respuesta
![](/content/images/user_nophoto_small.png)
![Martin Gag](http://blob.todoexpertos.com/avatars/sm/96bfqf3cdseiavhw.jpg?v=44)
¿Andres cómo estas?=.... yo te recomiendo que crees una consulta y que hagas la vinculacion a una planilla de calculo de Excel.... de esta forma te queda vinculado osea que desde excel podes ver la informacion de la consulta creada en Access. En caso de querer modificar algo lo tienes que hacer desde Access... otro tema que necesitas tener en cuenta es que teniendo Access y Excel abiertos al mismo tiempo no podes actualizar la info desde Excel. Lo que tienes que hacer es cerrar el Access y después actualizar la planilla de calculo...
- Compartir respuesta
![](/content/images/user_nophoto_small.png)