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