Cómo Unir Múltiples PDFs Usando Excel VBA

Este artículo explica cómo unir varios archivos PDF en uno solo utilizando Excel VBA. Al automatizar este proceso, puedes ahorrar esfuerzo y trabajar de manera eficiente. Este método es particularmente útil cuando se trata de un gran número de PDFs. Sigue los pasos a continuación para crear y usar fácilmente una macro de unión de PDFs.

Índice

Herramientas Necesarias y Preparación

Para unir PDFs utilizando una macro VBA, se requiere cierta preparación. Revisa las herramientas y pasos a continuación.

Instalación de Herramientas para la Unión de PDFs

Para la unión de PDFs, se necesita una biblioteca de PDF. Aquí presentamos métodos utilizando Adobe Acrobat o PDFtk.

Para Adobe Acrobat
  1. Instala Adobe Acrobat. Se requiere una licencia para Adobe Acrobat Pro.
  2. Establece la biblioteca de objetos de Acrobat como referencia en VBA.
  • Abre el editor de VBA en Excel (Alt + F11).
  • Selecciona “References” desde el menú “Tools”.
  • Marca “Adobe Acrobat xx.x Type Library” y haz clic en “OK”.
Para PDFtk
  1. Instala PDFtk. Puedes usar PDFtk Server gratuito.
  2. Agrega el directorio de instalación de PDFtk al PATH del sistema.
  • Edita las variables de entorno del sistema de Windows y agrega la ruta de instalación de PDFtk al “Path”.

Configuración de la Macro

  1. Abre un archivo de Excel y abre el editor de VBA con Alt + F11.
  2. Inserta un nuevo módulo (Menú “Insert” → “Module”).
  3. Pega el siguiente código en el módulo.

Ahora estás listo para usar la macro de VBA. A continuación, pasaremos al código específico de VBA y su explicación.

Explicación del Código para Unir PDFs con VBA

Aquí, presentamos el código VBA utilizando Adobe Acrobat. Al usar PDFtk, puedes seguir pasos similares, pero se requieren operaciones de línea de comandos.

Código VBA Usando Adobe Acrobat

Primero, aquí está el código para unir PDFs utilizando VBA.

Sub MergePDFs_Acrobat()
    Dim AcroApp As Object
    Dim PartDocs As Object
    Dim CombinedDoc As Object
    Dim Pdf1 As String
    Dim Pdf2 As String
    Dim OutputPdf As String

    ' Establece la ruta para los archivos PDF
    Pdf1 = "C:\path\to\your\first\pdf.pdf"
    Pdf2 = "C:\path\to\your\second\pdf.pdf"
    OutputPdf = "C:\path\to\your\output\merged.pdf"

    ' Crea el objeto Adobe Acrobat
    Set AcroApp = CreateObject("AcroExch.App")
    Set PartDocs = CreateObject("AcroExch.PDDoc")

    ' Abre el primer PDF
    If PartDocs.Open(Pdf1) Then
        ' Crea un nuevo documento PDF con el primer PDF
        Set CombinedDoc = PartDocs

        ' Abre el segundo PDF
        If PartDocs.Open(Pdf2) Then
            ' Une el segundo PDF
            If CombinedDoc.InsertPages(CombinedDoc.GetNumPages() - 1, PartDocs, 0, PartDocs.GetNumPages(), 0) Then
                ' Guarda el PDF unido
                If Not CombinedDoc.Save(1, OutputPdf) Then
                    MsgBox "No se pudo guardar el PDF unido."
                End If
            Else
                MsgBox "No se pudieron insertar las páginas."
            End If

            ' Cierra el segundo PDF
            PartDocs.Close
        Else
            MsgBox "No se pudo abrir el segundo PDF."
        End If

        ' Cierra el primer PDF
        CombinedDoc.Close
    Else
        MsgBox "No se pudo abrir el primer PDF."
    End If

    ' Salir de Acrobat
    AcroApp.Exit
    Set AcroApp = Nothing
    Set PartDocs = Nothing
    Set CombinedDoc = Nothing
End Sub

Explicación del Código

  • Dim AcroApp As Object: Crea un objeto para la aplicación Adobe Acrobat.
  • Dim PartDocs As Object: Crea un objeto para gestionar documentos PDF individuales.
  • Dim CombinedDoc As Object: Crea un objeto para gestionar el documento PDF combinado.
  • Pdf1, Pdf2, OutputPdf: Establece las rutas para los archivos PDF a unir y el archivo PDF de salida.
  • Set AcroApp = CreateObject("AcroExch.App"): Crea una instancia de la aplicación Adobe Acrobat.
  • Set PartDocs = CreateObject("AcroExch.PDDoc"): Crea una instancia para documentos PDF individuales.
  • PartDocs.Open(Pdf1), PartDocs.Open(Pdf2): Abre los archivos PDF.
  • CombinedDoc.InsertPages: Inserta el segundo PDF en el primer PDF.
  • CombinedDoc.Save: Guarda el PDF unido.
  • AcroApp.Exit: Sale de la aplicación Acrobat.

Código VBA Usando PDFtk

A continuación, aquí está el código VBA para usar PDFtk.

Sub MergePDFs_PDFtk()
    Dim Pdf1 As String
    Dim Pdf2 As String
    Dim OutputPdf As String
    Dim Command As String

    ' Establece la ruta para los archivos PDF
    Pdf1 = "C:\path\to\your\first\pdf.pdf"
    Pdf2 = "C:\path\to\your\second\pdf.pdf"
    OutputPdf = "C:\path\to\your\output\merged.pdf"

    ' Crea el comando PDFtk
    Command = "pdftk " & Pdf1 & " " & Pdf2 & " cat output " & OutputPdf

    ' Ejecuta el comando shell para unir los PDFs
    Shell Command, vbNormalFocus
End Sub

Explicación del Código

  • Pdf1, Pdf2, OutputPdf: Establece las rutas para los archivos PDF a unir y el archivo PDF de salida.
  • Command: Crea el comando PDFtk. El comando pdftk une los archivos PDF especificados y genera el archivo de salida.
  • Shell Command, vbNormalFocus: Ejecuta el comando shell para unir los PDFs.

Ahora entiendes cómo unir múltiples PDFs usando Excel VBA. A continuación, explicaremos los pasos para ejecutar la macro.

Pasos para Ejecutar la Macro

Aquí, explicaremos los pasos para ejecutar la macro en Excel utilizando el código VBA introducido anteriormente para unir PDFs.

Configuración y Ejecución de la Macro

  1. Abre el archivo de Excel
    Abre el archivo de Excel donde deseas ejecutar el proceso de unión.
  2. Abre el editor de VBA
    Presiona Alt + F11 para abrir el editor de VBA.
  3. Inserta un nuevo módulo
    Selecciona “Insert” desde el menú y elige “Module” para insertar un nuevo módulo.
  4. Pega el código
    Pega el siguiente código en el nuevo módulo. Aquí mostramos un ejemplo usando Adobe Acrobat, pero si usas PDFtk, usa el código de PDFtk introducido anteriormente.
Sub MergePDFs_Acrobat()
    Dim AcroApp As Object
    Dim PartDocs As Object
    Dim CombinedDoc As Object
    Dim Pdf1 As String
    Dim Pdf2 As String
    Dim OutputPdf As String

    ' Establece la ruta para los archivos PDF
    Pdf1 = "C:\path\to\your\first\pdf.pdf"
    Pdf2 = "C:\path\to\your\second\pdf.pdf"
    OutputPdf = "C:\path\to\your\output\merged.pdf"

    ' Crea el objeto Adobe Acrobat
    Set AcroApp = CreateObject("AcroExch.App")
    Set PartDocs = CreateObject("AcroExch.PDDoc")

    ' Abre el primer PDF
    If PartDocs.Open(Pdf1) Then
        ' Crea un nuevo documento PDF con el primer PDF
        Set CombinedDoc = PartDocs

        ' Abre el segundo PDF
        If PartDocs.Open(Pdf2) Then
            ' Une el segundo PDF
            If CombinedDoc.InsertPages(CombinedDoc.GetNumPages() - 1, PartDocs, 0, PartDocs.GetNumPages(), 0) Then
                ' Guarda el PDF unido
                If Not CombinedDoc.Save(1, OutputPdf) Then
                    MsgBox "No se pudo guardar el PDF unido."
                End If
            Else
                MsgBox "No se pudieron insertar las páginas."
            End If

            ' Cierra el segundo PDF
            PartDocs.Close
        Else
            MsgBox "No se pudo abrir el segundo PDF."
        End If

        ' Cierra el primer PDF
        CombinedDoc.Close
    Else
        MsgBox "No se pudo abrir el primer PDF."
    End If

    ' Salir de Acrobat
    AcroApp.Exit
    Set AcroApp = Nothing
    Set PartDocs = Nothing
    Set CombinedDoc = Nothing
End Sub
  1. Ejecuta la macro
  • Cierra el editor de VBA y regresa a Excel.
  • Presiona Alt + F8 para abrir el cuadro de diálogo “Macro”.
  • Selecciona “MergePDFs_Acrobat” y haz clic en “Run”.

6.Verifica el resultado de la unión de PDFs
Verifica que el archivo PDF unido se haya creado en la ruta de archivo de salida especificada (por ejemplo, C:\path\to\your\output\merged.pdf).

Usando PDFtk

  1. Pega el código VBA
    Si usas PDFtk, pega el siguiente código en el módulo.
Sub MergePDFs_PDFtk()
    Dim Pdf1 As String
    Dim Pdf2 As String
    Dim OutputPdf As String
    Dim Command As String

    ' Establece la ruta para los archivos PDF
    Pdf1 = "C:\path\to\your\first\pdf.pdf"
    Pdf2 = "C:\path\to\your\second\pdf.pdf"
    OutputPdf = "C:\path\to\your\output\merged.pdf"

    ' Crea el comando PDFtk
    Command = "pdftk " & Pdf1 & " " & Pdf2 & " cat output " & OutputPdf

    ' Ejecuta el comando shell para unir los PDFs
    Shell Command, vbNormalFocus
End Sub
  1. Ejecuta la macro
    Sigue los mismos pasos para ejecutar la macro descritos anteriormente, pero usa el código de PDFtk.

Con estos pasos, puedes unir múltiples archivos PDF usando Excel VBA. A continuación, cubriremos problemas comunes y sus soluciones.

Solución de Problemas

Aquí tienes problemas comunes y soluciones al unir PDFs usando Excel VBA.

1. Adobe Acrobat no está instalado

Problema: Si Adobe Acrobat no está instalado, se produce un error con CreateObject("AcroExch.App").
Solución: Instala Adobe Acrobat Pro. Esta operación no se puede realizar con el lector gratuito de Adobe.

2. Ruta de archivo incorrecta

Problema: Si la ruta del archivo PDF especificado es incorrecta, se produce un error con PartDocs.Open(Pdf1) o PartDocs.Open(Pdf2).
Solución: Verifica que la ruta sea correcta y que los archivos existan en las rutas especificadas.

3. Falla en la unión de PDF

Problema: CombinedDoc.InsertPages puede fallar al insertar páginas.
Solución: Verifica que los PDFs a unir no estén corruptos. Si los PDFs tienen un número extremadamente grande de páginas, pueden ocurrir problemas de memoria. Intenta unir archivos PDF más pequeños.

4. Falla en guardar el PDF

Problema: Guardar el PDF unido con CombinedDoc.Save puede fallar.
Solución: Asegúrate de que la carpeta de destino de guardado tenga permisos de escritura. Además, verifica que no haya un archivo existente con el mismo nombre e intenta guardar con un nombre diferente.

5. El comando PDFtk no se ejecuta

Problema: Si el comando PDFtk no se ejecuta correctamente, se produce un error con Shell Command, vbNormalFocus.
Solución: Asegúrate de que PDFtk esté instalado correctamente y agregado al PATH del sistema. Además, intenta ejecutar el comando PDFtk directamente en el símbolo del sistema para verificar si funciona correctamente.

6. Configuración de referencia incorrecta

Problema: Si la biblioteca de objetos de Adobe Acrobat no está establecida como referencia, se produce un error con CreateObject("AcroExch.App").
Solución: En el editor de VBA, selecciona “References” desde el menú “Tools”, marca “Adobe Acrobat xx.x Type Library” y haz clic en “OK”.

7. Otros errores de VBA

Problema: Para otros errores de VBA, ingresa al modo de depuración para identificar la causa.
Solución: En el editor de VBA, presiona F8 para recorrer el código paso a paso e identificar la línea que causa el error. Investiga el mensaje de error para una solución adecuada.

Consulta esta guía de solución de problemas para resolver problemas y unir PDFs sin problemas. A continuación, resumiremos los pasos discutidos.

Conclusión

Hemos explicado cómo unir múltiples PDFs usando Excel VBA. Al seguir estos pasos, puedes automatizar las tareas manuales de unión de PDFs, mejorando la eficiencia. Aquí están los puntos clave:

  • Prepara las herramientas necesarias: Instala y configura Adobe Acrobat o PDFtk.
  • Crea el código VBA: Crea el código VBA para unir PDFs usando Adobe Acrobat o PDFtk.
  • Ejecuta la macro: Ejecuta la macro VBA en Excel para unir PDFs.
  • Solución de problemas: Aborda problemas comunes y asegura una unión de PDFs sin problemas.

Siguiendo estos pasos, puedes unir fácilmente múltiples PDFs y mejorar significativamente la eficiencia del trabajo. Aprovecha al máximo la automatización de VBA para optimizar tus tareas diarias.

Índice