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

Respuesta
1

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.

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

Ay por Dios que respuestas. Si pasa el parámetro AutoStart:=True sobra

FollowHyperlink

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.

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"

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.

Realmente no le probado con un volumen considerable de registros ¿Cuántos registros tiene en la consulta?

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.

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:‎

  1. ‎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).‎
  2. ‎Los archivos no se abren si sus nombres contienen‎‎algunos caracteres‎‎ (como # o %.)‎
  3. ‎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:‎

  1. ‎Precede a "file:///" para evitar las advertencias de seguridad más comunes.‎
  2. ‎Maneja los caracteres especiales de manera más inteligente.‎
  3. ‎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:‎

  1. ‎Si el administrador de red no permite que los hipervínculos se abran en absoluto, no se abrirán.‎
  2. ‎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

¡Gracias!  Al final la velocidad de apertura era que no me iba bien la red ese día. Perfecto lo abre sin problema.

Bien me alegro le halla servido

Andrés ¿es qué no ha solucionado el inconveniente? Veo que sigue la pregunta abierta y el terco proponiendo bestialidades. Respecto a lo que le propone Martin Gag no lo veo conveniente.

Respuesta
1

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.

El código funciona perfectamente pero es como dice @eduardo Pérez salta el aviso de problema de seguridad. ¿algo para remediarlo?

¿Puedes poner una imagen del aviso?

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.

Es un archivo que creo en el escritorio. Puse esa ruta donde comentas pero sigue saliendo el error.

Prueba con

Respuesta
-1

¿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...

La pregunta no admite más respuestas

Más respuestas relacionadas