Poder hacer una vista previa y dar una carpeta de destino a un PDF

A ver si podéis ayudarme un poco.

Tengo una rutina para crear PDF en una Facturación, y necesito poder hacer una vista previa del PDF creado y después de forma manual dar la dirección donde quiero que se guarde.

Me valdría muchísimo el poder abrir el comando de .. Guardar como.. De windows para poderlo guardar en el distinto que necesito cada vez.

La rutina que estoy utilizando es:

Dim RutaPDF As String
Dim NombreInfPDF As String
Dim RutaYFicheroPDF As String
RutaPDF = Application.CurrentProject.Path & "\InformesPDF\"
NombreInfPDF = "PRESUPUESTO " & Me.[Nombre Fiscal] & ".pdf"
RutaYFicheroPDF = RutaPDF & NombreInfPDF
DoCmd.OpenReport "PRESUPUESTOINFORME", acViewPreview, , "IdPresupuesto=" & Me.IdPresupuesto, acHidden
DoCmd.OutputTo ObjectType:=acOutputReport, ObjectName:="PRESUPUESTOINFORME", OutputFormat:=acFormatPDF, OutputFile:=RutaYFicheroPDF, AutoStart:=False 'True
DoCmd. Close acReport, "PRESUPUESTOINFORME"

Ahora lo estoy guardando en InformesPDF, y necesito poderlo guardar cada informe un destino diferente, que son las carpetas individualizadas por cada Cliente.

3 Respuestas

Respuesta
2

Vamos por partes:

1º/ Para tener una "vista previa" del informe, elimina el acHidden del DoCmd. OpenReport, o cámbialo por acWindowNormal.

2º/ Para guardar los informes en carpetas independientes, no te haría falta abrir un cuadro de diálogo, si, por ejemplo organizas los pdfs en estos directorios (partiendo de la carpeta donde tienes la BD)

\Informes PDF\Cliente1

\Informes PDF\Cliente2

\Informes PDF\Cliente...

Tan sólo has de modificar la asignación de la ruta. Por ejemplo, si en el formulario desde el que ejecutas el código tienes un campo con el nombre del cliente (txtCliente), te quedaría así:

RutaPDF = Application.CurrentProject.Path & "\InformesPDF\" & Me.txtCliente

Obviamente puedes hacerlo con otro campo (IDCliente) o cualquier combinación.

Si la carpeta del cliente no existe (puedes comprobarlo con la función Dir() ), la puedes crear con la función mkDir.

3º/ Si quieres aún así navegar y seleccionar la carpeta de destino, has de usar el objeto FileDialog (en la web de Neckkito tienes un ejemplo explicado sobre su uso), pero básicamente el proceso sería este:

a) Registras la referencia Microsoft Office xx.x Object Library

b) En un módulo independiente pegas esta función:

'--------------------------------------------------------------------------------------------
'Función para seleccionar una carpeta
'--------------------------------------------------------------------------------------------
Public Function fncSelectCarpeta() As String
'Creamos un control de errores
On Error GoTo sol_err
'Declaramos las variables
Dim fd As Object 'fd = FileDialog
Dim rutaIni As String
'Definimos la ruta inicial
rutaIni = Application.CurrentProject.Path
'Creamos el objeto FileDialog
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
'Configuramos las características de nuestra ventana de diálogo
With fd
.Title = "Selecciona la carpeta"
.ButtonName = "Aceptar"
.InitialView = msoFileDialogViewList
.InitialFileName = rutaIni
'Detectamos el botón pulsado por el usuario
If .Show = -1 Then
'Asignamos a la función la carpeta seleccionada, convirtiéndola
'a un valor de tipo String
fncSelectCarpeta = CStr(.SelectedItems.Item(1))
Else
'Si se pulsa cancelar avisamos y salimos
MsgBox "Selección cancelada", vbExclamation, "CANCELADO"
Exit Function
End If
End With
Salida:
Exit Function
sol_err:
MsgBox "Se ha producido el error: " & Err.Number & " - " & Err.Description
Resume Salida
End Function

c) en tu código, la ruta la asignas así:

RutaPDF =fncSelectCarpeta()

Respuesta
1

Otra forma puede ser, en el botón o lo que sea pon simplemente

DoCmd. OutputTo acOutputReport, "Presupuesto", acFormatPDF

Al no decirle donde debe guardarlo se te abrirá una ventana para que localices la carpeta en la que quieras guardarlo.

Gracias por tu ayuda, no entiendo donde he de colocar la instruccion que me indicas.

Ha de ser dentro e la rutina de creacion del PDF?, y he de sustituir alguna parametro de ella?.

Te importaria indicarme exactamente dentro de las instrucciones que utilizo donde he de hacerlo?.

Un saludo

Supongo que la instrucción que tu tenias estaba en un botón de comando o en algún evento de un cuadro de texto. Por si no fuera así, lo más sencillo es que en el formulario crees un botón de comando y en sus propiedades-Eventos-Al hacer clic crea un procedimiento de evento y entre Private Sub... y End Sub escribe

DoCmd. OutputTo acOutputReport, "Presupuesto", acFormatPDF

Pero si quieres ver antes el informe, debes poner

Docmd. Openreport"presupuesto", acpreview

DoCmd. OutputTo acOutputReport,, acFormatPDF

Así cuando pulses el botón se abrirá el informe y a su vez te abrirá la ventana para que lo guardes

Respuesta
1

José: Ya que la pregunta me sale sugerida, y como un pequeño complemento a la respuesta de Sveinbjorn, si quieres "Previsualizar" el PDF, no el Informe, puedes dejar al final de:

DoCmd.OutputTo ObjectType:=acOutputReport, ObjectName:="PRESUPUESTOINFORME", OutputFormat:=acFormatPDF, OutputFile:=RutaYFicheroPDF, AutoStart:=False 'True

de éste modo>>

...., AutoStart:=True

Mis saludos a ambos, José y Sveinbjorn>> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas