ACCESS exportar varios informes y combinarlos en un solo PDF indicando donde guardarlo

Tengo muchos informes que debo exportar combinados a un solo PDF y que me pregunte donde quiero guardarlo. Quiero hacerlo SIN ningún programa externo tipo Adobe Acrobat u otro similar.
Imagino que habrá que hacerlo con código VBA pero no se como hacerlo.

2 Respuestas

Respuesta

Si la version de Access es igual o superior a la 2010 (a la 2007 con un parche) Access puede crear documentos PDF sin necesidad de elementos externos, por acuerdo con ADOBE dispone de licencia.

La creación de un único PDF utilizando documentos PDF (incluso con la version completa de Acrobat) se basa en un nuevo documento PDF que los agrupa.

Esa misma técnica se puede hacer con Access, esto es agrupar en un nuevo Informe los informes dispersos (como sub-informes) y tras ello exportar lo a formato PDF (o cualquiera de los formatos disponibles).

Lo de enviarlo a una carpeta y asignarle un nombre no tiene misterio (esta debatido y publicado incluso en este foro) y seria la segunda parte tras finalizar la primera: la creación del informe que los aglutina.

Como no se dispone de información, se desconoce si existe perdida de información al pasar de informe a sub-informe y -probablemente- una forma de solucionarlo podría ir en la línea de crear agrupaciones (lo que permite añadir una cabecera y pie al grupo), es algo que solo lo puede valorar quien dispone de los datos, pues ni tan siquiera se publico si es un formato predefinido o hay que reconstruirlo en tiempo de ejecución.

Nada impide aunar diferentes informes en uno en tiempo de ejecución y tampoco seria un impedimento el obtenerlos de una lista, solo es un poco de código que se ha de personalizar y para ello se ha de tener una idea clara de la aplicación (los datos son lo de menos, pueden ser inventados).

Tengo muchos informes y el incluir informes como subinformes tiene un límite y no puedo meterlos todos, lo solucioné con el código que pongo mas abajo, el cual hace lo siguiente:

- Exporta los informes que especifiques a archivos PDF individuales, pidiéndome en que carpeta quiero exportarlos.

- Los combina con el programa portable PDFtk que he puesto en el directorio raíz C:\, poniéndole al archivo combinado la fecha al final. Si lo ponéis en otra ubicación, habría que cambiar la ruta en el código.

- Seguidamente borra los archivos individuales y deja el combinado

Así me sale perfecto, aunque debo decir que no soy ningún experto, me he tenido que ayudar con ChatGPT, aquí os pongo el código por si es de utilidad para alguien:

Option Compare Database

Option Explicit

Sub ExportReportsToPDFsINVIERNO_VERANO()

    Dim reportNames As Collection

    Dim reportName As Variant

    Dim tempPDF As String

    Dim outputFolder As String

    Dim combinedPDF As String

    Dim fDialog As Object

    Dim fso As Object

    Dim pdfFiles As Collection

    Dim pdfFile As Variant

    Dim command As String

    Dim currentDate As String

    ' Obtener la fecha actual en el formato deseado (dd-mm-yyyy)

    currentDate = Format(Date, "dd-mm-yy")

    ' Crear una colección de nombres de informes

    Set reportNames = New Collection

    reportNames.Add "INFORME 01"

    reportNames.Add "INFORME 02"

    reportNames.Add "INFORME 03"

    ' Añade más informes según sea necesario

    ' Crear el cuadro de diálogo para seleccionar la carpeta

    Set fDialog = Application.FileDialog(4) ' 4 es el valor para msoFileDialogFolderPicker

    With fDialog

        .Title = "Selecciona la carpeta de destino"

        .AllowMultiSelect = False

        If .Show = -1 Then ' Si el usuario selecciona una carpeta

            outputFolder = .SelectedItems(1) & "\"

        Else ' Si el usuario cancela el cuadro de diálogo

            MsgBox "No se seleccionó ninguna carpeta. Operación cancelada.", vbExclamation

            Exit Sub

        End If

    End With

    ' Verificar si la carpeta seleccionada existe

    Set fso = CreateObject("Scripting.FileSystemObject")

    If Not fso.FolderExists(outputFolder) Then

        MsgBox "La carpeta seleccionada no existe. Operación cancelada.", vbExclamation

        Exit Sub

    End If

    ' Crear una colección para almacenar los nombres de archivos PDF

    Set pdfFiles = New Collection

    ' Exportar cada informe a PDF individual

    For Each reportName In reportNames

        tempPDF = outputFolder & reportName & ".pdf"

        DoCmd.OutputTo acOutputReport, reportName, acFormatPDF, tempPDF

        pdfFiles.Add tempPDF

    Next reportName

    ' Nombre del PDF combinado con la fecha actual

    combinedPDF = outputFolder & "Tallajes_INVIERNO_VERANO_CON_RESUMEN_" & currentDate & ".pdf"

    ' Crear el comando para combinar los PDFs usando PDFtk

    command = "C:\PDFtk\bin\pdftk.exe"

    For Each pdfFile In pdfFiles

        command = command & " """ & pdfFile & """"

    Next pdfFile

    command = command & " cat output """ & combinedPDF & """"

    ' Ejecutar el comando

    Shell command, vbNormalFocus

    ' Esperar un momento para asegurarse de que PDFtk complete el trabajo

    Dim waitTime As Date

    waitTime = Now + TimeValue("0:00:05") ' Esperar 5 segundos

    Do While Now < waitTime

        DoEvents

    Loop

    ' Eliminar los archivos PDF individuales

    For Each pdfFile In pdfFiles

        fso.DeleteFile pdfFile

    Next pdfFile

    MsgBox "TALLAJES DE INVIERNO-VERANO CON RESUMEN EXPORTADOS Y COMBINADOS EN " & combinedPDF & ". LOS PDFs INDIVIDUALES HAN SIDO ELIMINADOS."

End Sub

Lo único que parece que no cumple, es la utilización de una aplicación externa a Access algo que (si la seguridad del entorno de trabajo lo permite) soluciona el problema.

A titulo de curiosidad ¿Cuánto pesa el PDF final? Debe de ser bastante (para saturar a Access).

Respuesta

No tiene sentido agrupar varios informes en uno tendría que estar abriendo y actualizando el informe principal para incluir otro sub informe. Consulte este video de mi canal https://www.youtube.com/watch?v=ENudWHDqQCY .

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas