Como puedo Exportar informe a pdf access dándole nombre

En una de mis aplicaciones tengo el siguiente código:

Dim resp As Integer
Const miRuta As String = "C:\Users\KIKE\Desktop\Informes\"
Dim miInforme As String
miInforme = Me.txtFecha
resp = MsgBox("¿Desea ver el informe?", vbQuestion + vbYesNo, "CONFIRMAR")
If resp = vbYes Then
DoCmd.OpenReport "InfDisponibilidad", acViewPreview, , "Fecha=#" & Me.txtFecha & "#"
Else
DoCmd.OpenReport "InfDisponibilidad", acViewPreview, , "Fecha=#" & Me.txtFecha & "#", acHidden
DoCmd.OutputTo acOutputReport, "InfDisponibilidad", "PDFFormat(*.pdf)", "C:\Users\KIKE\Desktop\Informes\" & Format(Date, "ddmmyy") & ".pdf", False, "", , acExportQualityPrint
End If

Anteriormente solo necesitaba exportar un informe por fecha al día y puesto que el unico elemento que tenia como filtro para lanzar el informe era un campo fecha quedó así, pero ahora necesitaría exportar más informes al día y además distintos algunos previamente filtrados varias veces, (fecha, profesional, nombre, etc...) este es un  formulario continuo y esta basado en una consulta y una vez filtrado obtengo los resultados en el formulario e uso un botón para lanzar el informe con dichos resultados, me gustaría si puede ser cuando se vaya a exportar el pdf ser yo que le de nombres distintos como cuando se guarda algo en el pc no se si esto es posible o otra solución para que no se me pisen los informes.

2 Respuestas

Respuesta
1

Ya te respondí en el foro (http://nksvaccessolutions.com/Foro/viewtopic.php?f=8&p=489#p489 ), pero te copio aquí la respuesta:

Dos cosas:
1º/ ¿Para qué tienes estas dos lineas si no las usas para nada?:

Dim miInforme As String

miInforme = Me.txtFecha

2º/ Lo único que tienes que modificar es la parte del nombre del archivo de destino en el DoCmd. OutPutTo por una variable en la que previamente le asignes el nombre con el que quieres te lo guarde, es decir, cambia esto:
"C:\Users\KIKE\Desktop\Informes\" & Format(Date, "ddmmyy") & ".pdf"
por esto:
"C:\Users\KIKE\Desktop\Informes\" & nombreArchivo & ".pdf"
Y previamente la declaras (Dim nombreArchivo As String) y le asignas el nombre como más te convenga (nombre del informe + fecha, nombre informe + algún otro campo, usas un InputBox para preguntar el nombre...)

¡Gracias! 

Muchas gracias como siempre funciona correctamente, lo he dejado así:

Dim resp As Integer
Const miRuta As String = "C:\Users\KIKE\Desktop\Informes\"
Dim nombreArchivo As String
resp = MsgBox("¿Desea ver el informe?", vbQuestion + vbYesNo, "CONFIRMAR")
If resp = vbYes Then
DoCmd.OpenReport "InfDisponibilidad", acViewPreview, , "Fecha=#" & Me.txtFecha & "#"
Else
nombreArchivo = InputBox("Escriba Nombre del PDF", "PDF")
DoCmd.OpenReport "InfDisponibilidad", acViewPreview, , "Fecha=#" & Me.txtFecha & "#", acHidden
DoCmd.OutputTo acOutputReport, "InfDisponibilidad", "PDFFormat(*.pdf)", "C:\Users\KIKE\Desktop\Informes\" & nombreArchivo & ".pdf", False, "", , acExportQualityPrint

creo que el inputbox debe de ir hay no?

una cosa más si quieres abro otra pregunta pero es de si o no creo, a esta aplicación le estoy realizando el ribbon personalizado y he leido una pregunta en todoexpertos que le da problemas con el runtime.

Mi pregunta es si en unos ordenadores donde se usa esta aplicación mediante el runtime ya que no tienen access mi ribbon personalizado para ella no funcionaría?

Pues sinceramente no lo sé (no tengo instalado el runtime) y nunca lo probé, pero imagino que no debiera haber problemas si está bien hecho.

De hecho, si ves este video, verás una aplicación profesional corriendo en el runtime de access 2010 y con ribbons personalizados: http://accessusergroups.org/espana/sin-excusas-ya-podeis-consultar-el-video-de-lo-que-es-un-framework-de-contabilidad-y-gestion/

Respuesta
1

Kike: Lo que yo haría en éste caso es que el Nombre del Fichero tomara la fecha con la Hora y así no hay duda.

Sustituye: Format(Date, "ddmmyy") por >> FormatDateTime (Now(), vbGeneralDate)

La verdad es que no lo he probado, pero debería funcionar. Saludos >> Jacinto

He probado y me da error 2501 la opción outputto se cancelo

De error en esta línea:

DoCmd.OutputTo acOutputReport, "InfDisponibilidad", "PDFFormat(*.pdf)", "C:\Users\KIKE\Desktop\Informes\" & FormatDateTime(Now(), vbGeneralDate) & ".pdf", False, "", , acExportQualityPrint

el codigo esta así:

Dim resp As Integer
Const miRuta As String = "C:\Users\KIKE\Desktop\Informes\"
Dim miInforme As String
miInforme = Me.txtFecha
resp = MsgBox("¿Desea ver el informe?", vbQuestion + vbYesNo, "CONFIRMAR")
If resp = vbYes Then
DoCmd.OpenReport "InfDisponibilidad", acViewPreview, , "Fecha=#" & Me.txtFecha & "#"
Else
DoCmd.OpenReport "InfDisponibilidad", acViewPreview, , "Fecha=#" & Me.txtFecha & "#", acHidden
DoCmd.OutputTo acOutputReport, "InfDisponibilidad", "PDFFormat(*.pdf)", "C:\Users\KIKE\Desktop\Informes\" & FormatDateTime(Now(), vbGeneralDate) & ".pdf", False, "", , acExportQualityPrint

Kike: Prueba quitandole los parentesis a Now() o se que te quedaría >>

FormatDateTime (Now, vbGeneralDate)

Si sigue el fallo me comentas. Saludos >> Jacinto

Kike: Creo que te he confudido y el error puede venir porque el Nombre del Fichero tenga los dos puntos o las Barras de la Fecha.

Por ello es conveniente adecuarlo antes de éste modo:

Inmediatamente después de ... acHidden

Dim StrFechaHora As String
StrFechaHora = CStr(FormatDateTime(Now(), vbGeneralDate))
StrFechaHora = Replace(StrFechaHora, "/", "")
StrFechaHora = Replace(StrFechaHora, " ", "")
StrFechaHora = Replace(StrFechaHora, ":", "")

y la línea del Docmd......
DoCmd.OutputTo acOutputReport, "InfDisponibilidad", "PDFFormat(*.pdf)", "C:\Users\KIKE\Desktop\Informes\" & StrFechaHora & ".pdf", False, "", , acExportQualityPrint

Espero que a la tercera vaya la vencida. En mi opinión es una solución mejor que ir adjudicando cada vez un Nombre de fichero. Saludos >> Jacinto

Buenas tardes  Jacinto he realizado lo que me decías y me quedó así, creo que era así como me decías no?

Dim resp As Integer
Const miRuta As String = "C:\Users\KIKE\Desktop\Informes\"
Dim miInforme As String
miInforme = Me.txtFecha
resp = MsgBox("¿Desea ver el informe?", vbQuestion + vbYesNo, "CONFIRMAR")
    If resp = vbYes Then
        DoCmd.OpenReport "InfDisponibilidad", acViewPreview, , "Fecha=#" & Me.txtFecha & "#"
    Else
        miInforme = Me.txtFecha
        DoCmd.OpenReport "InfDisponibilidad", acViewPreview, , "Fecha=#" & Me.txtFecha & "#", acHidden
    Dim StrFechaHora As String
    StrFechaHora = CStr(FormatDateTime(Now(), vbGeneralDate))
    StrFechaHora = Replace(StrFechaHora, "/", "")
    StrFechaHora = Replace(StrFechaHora, " ", "")
    StrFechaHora = Replace(StrFechaHora, ":", "")
    DoCmd.OutputTo acOutputReport, "InfDisponibilidad", "PDFFormat(*.pdf)", "C:\Users\KIKE\Desktop\Informes\" & FormatDateTime(Now(), vbGeneralDate) & ".pdf", False, "", , acExportQualityPrint
    End If

me sigue dando este error:

Kike: Sin repasar mucho más, la línea del DoCmd... que tienes

DoCmd.OutputTo acOutputReport, "InfDisponibilidad", "PDFFormat(*.pdf)", "C:\Users\KIKE\Desktop\Informes\" & FormatDateTime(Now(), vbGeneralDate) & ".pdf", False, "", , acExportQualityPrint

All haber conformado el Nombre del Archivo de otra manera tienes que sustituirla por:

DoCmd.OutputTo acOutputReport, "InfDisponibilidad", "PDFFormat(*.pdf)", "C:\Users\KIKE\Desktop\Informes\" & StrFechaHora & ".pdf", False, "", , acExportQualityPrint

Ya me comentarás. Saludos >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas