Cómo usar VBA para convertir documentos por lotes a PDF
🔍 WiseChecker

Cómo usar VBA para convertir documentos por lotes a PDF

Convertir manualmente una gran cantidad de documentos de Word a PDF uno por uno es tedioso y consume tiempo. Puede automatizar esta tarea con una macro de VBA que procese todos los archivos de una carpeta a la vez. Este artículo explica cómo escribir y ejecutar un script de VBA en Word que convierta todos los archivos .docx de una carpeta de origen a PDF en una carpeta de destino. Al final, tendrá una macro reutilizable que le ahorrará horas de trabajo manual.

Puntos clave: Conversión por lotes a PDF con VBA en Word

  • Alt+F11 para abrir el editor de VBA: Acceda al entorno de Visual Basic for Applications para escribir su macro.
  • FileDialog(msoFileDialogFolderPicker): Permite al usuario seleccionar la carpeta de origen que contiene los documentos de Word.
  • CreateObject(“Word.Application”): Abre una instancia oculta de Word para procesar archivos sin interrumpir su sesión actual.
  • Document.ExportAsFixedFormat con wdExportFormatPDF: Convierte cada documento a PDF en la carpeta de destino.

ADVERTISEMENT

Entender la función de conversión por lotes de VBA

VBA (Visual Basic for Applications) es un lenguaje de programación integrado en las aplicaciones de Microsoft Office. Con VBA, puede automatizar tareas repetitivas como convertir varios documentos de Word a PDF. La macro se ejecuta dentro de Word y puede abrir, modificar y exportar documentos sin interacción del usuario. Antes de escribir la macro, asegúrese de que su instalación de Word incluya compatibilidad con VBA, que está habilitada de forma predeterminada en todas las versiones de escritorio de Word. No necesita ningún software de terceros. La macro utiliza el método ExportAsFixedFormat, que produce archivos PDF de alta calidad idénticos al proceso manual Archivo > Guardar como > PDF. El script recorre todos los archivos .docx de una carpeta seleccionada, abre cada uno, lo exporta como PDF y lo cierra. Puede ajustar la carpeta de destino dentro de la macro o dejar que el script guarde los PDF en una subcarpeta llamada “PDF” dentro de la carpeta de origen.

Pasos para crear y ejecutar la macro de conversión por lotes a PDF

Siga estos pasos para escribir, guardar y ejecutar la macro de VBA. La macro le solicita seleccionar una carpeta y luego convierte cada archivo .docx de esa carpeta a PDF. Los archivos PDF se guardan en una subcarpeta llamada “PDF” dentro de la carpeta de origen. Si la subcarpeta no existe, la macro la crea automáticamente.

  1. Abra el editor de VBA
    En Word, presione Alt+F11 para abrir el editor de Visual Basic for Applications. Si no ve la ventana Explorador de proyectos, vaya a Ver > Explorador de proyectos.
  2. Inserte un nuevo módulo
    En el Explorador de proyectos, haga clic con el botón derecho en Normal o en el nombre de su documento y elija Insertar > Módulo. Aparece una ventana de código en blanco.
  3. Pegue el código de la macro
    Copie y pegue el siguiente código en la ventana del módulo:
    Sub BatchConvertToPDF()
        Dim fd As FileDialog
        Dim sourceFolder As String
        Dim fileName As String
        Dim doc As Document
        Dim pdfFolder As String
        Dim wordApp As Word.Application
    
        Set fd = Application.FileDialog(msoFileDialogFolderPicker)
        fd.Title = "Select folder containing Word documents"
        If fd.Show = -1 Then
            sourceFolder = fd.SelectedItems(1)
        Else
            MsgBox "No folder selected. Exiting macro.", vbExclamation, "Canceled"
            Exit Sub
        End If
    
        ' Ensure folder path ends with backslash
        If Right(sourceFolder, 1) <> "\" Then sourceFolder = sourceFolder & "\"
    
        ' Create PDF output subfolder
        pdfFolder = sourceFolder & "PDF\"
        If Dir(pdfFolder, vbDirectory) = "" Then
            MkDir pdfFolder
        End If
    
        ' Get first .docx file
        fileName = Dir(sourceFolder & "docx")
    
        ' Create a hidden Word application instance
        Set wordApp = New Word.Application
        wordApp.Visible = False
        wordApp.DisplayAlerts = wdAlertsNone
    
        Do While fileName <> ""
            Set doc = wordApp.Documents.Open(sourceFolder & fileName)
            ' Convert to PDF
            doc.ExportAsFixedFormat _
                OutputFileName:=pdfFolder & Replace(fileName, ".docx", ".pdf"), _
                ExportFormat:=wdExportFormatPDF, _
                OpenAfterExport:=False, _
                OptimizeFor:=wdExportOptimizeForPrint, _
                Range:=wdExportAllDocument
            doc.Close SaveChanges:=False
            fileName = Dir()  ' Next file
        Loop
    
        wordApp.Quit
        Set wordApp = Nothing
    
        MsgBox "Conversion complete. PDF files saved in: " & vbCrLf & pdfFolder, vbInformation, "Done"
    End Sub
    
  4. Ejecute la macro
    Presione F5 mientras el cursor está dentro del código de la macro, o vaya a la cinta de opciones de Word y haga clic en Ver > Macros, seleccione BatchConvertToPDF y haga clic en Ejecutar. Aparece un cuadro de diálogo para seleccionar carpeta. Navegue hasta la carpeta que contiene sus archivos .docx y haga clic en Aceptar.
  5. Espere a que finalice
    La macro procesa cada archivo de forma silenciosa. Aparece un cuadro de mensaje cuando finalizan todas las conversiones. Abra la subcarpeta “PDF” dentro de la carpeta de origen para ver los archivos PDF generados.

ADVERTISEMENT

Problemas comunes y cómo evitarlos

“Error de compilación: Tipo definido por el usuario no definido”

Este error se produce si el editor de VBA no tiene una referencia a la biblioteca de objetos de Word. En el editor de VBA, vaya a Herramientas > Referencias y asegúrese de que Microsoft Word 16.0 Object Library (o su versión) esté marcada. Haga clic en Aceptar y ejecute la macro de nuevo.

La macro convierte solo unos pocos archivos y se detiene

Si Word encuentra un documento dañado, la macro puede detenerse. Para controlar los errores, agregue la línea On Error Resume Next justo después de Do While fileName <> "". Esto hace que la macro omita los archivos problemáticos y continúe con el resto. Agregue un contador para registrar los archivos omitidos si es necesario.

Los PDF se guardan en la ubicación incorrecta

La macro crea una subcarpeta llamada “PDF” dentro de la carpeta de origen. Si prefiere un destino diferente, cambie la línea pdfFolder = sourceFolder & "PDF\" por una ruta fija como pdfFolder = "C:\MyPDFs\". Asegúrese de que la carpeta exista o agregue un comando MkDir para la ruta personalizada.

La macro no aparece en la lista de macros

La macro debe guardarse en la plantilla Normal.dotm o en el documento activo. Si pegó el código en un módulo dentro del documento activo, la macro solo se ejecuta cuando ese documento está abierto. Para que la macro esté siempre disponible, pegue el código en el proyecto Normal (en Normal > Módulos).

Conversión manual vs macro de VBA: diferencias clave

Elemento Conversión manual Macro de VBA
Tiempo para 50 documentos Aproximadamente 90 minutos Menos de 5 minutos
Interacción del usuario requerida Abrir cada archivo, hacer clic en Guardar como, seleccionar PDF, confirmar Seleccionar la carpeta una vez, la macro se encarga del resto
Manejo de errores Detección manual de archivos dañados Puede omitir archivos dañados automáticamente
Control de la carpeta de salida Debe elegir la carpeta cada vez Subcarpeta fija o dinámica
Nivel de habilidad requerido Conocimientos básicos de Word Conocimientos básicos de VBA para crear la macro

Ahora puede convertir cientos de documentos de Word a PDF con un solo clic usando la macro de VBA. Para ampliar la macro, agregue un segundo bucle que procese archivos .doc cambiando "docx" por "doc" y agregando una llamada Dir independiente. Para usuarios avanzados, modifiquen los parámetros ExportAsFixedFormat para establecer opciones de seguridad del PDF o reducir el tamaño del archivo usando wdExportOptimizeForScreen en lugar de wdExportOptimizeForPrint.

ADVERTISEMENT