Cómo ejecutar una macro de VBA en todos los documentos de una carpeta
🔍 WiseChecker

Cómo ejecutar una macro de VBA en todos los documentos de una carpeta

Ejecutar la misma macro de VBA en cada documento de Word dentro de una carpeta ahorra horas de trabajo manual. Puede aplicar cambios de formato, insertar encabezados o actualizar tablas en cientos de archivos sin abrir cada uno individualmente. Este artículo explica cómo escribir y ejecutar un script de VBA que recorre todos los archivos .docx de una carpeta especificada y ejecuta su macro en cada documento. Aprenderá la estructura exacta del código, cómo establecer la ruta de la carpeta y qué hacer cuando Word bloquea la macro o cuando un archivo está dañado.

Puntos clave: ejecución de macros por lotes en varios documentos

  • Función Dir con comodín .docx: recorre todos los archivos de Word de una carpeta sin necesidad de un cuadro de diálogo de archivos.
  • Método Documents.Open dentro del bucle: abre cada archivo, aplica la macro y luego lo cierra y guarda los cambios automáticamente.
  • Application.ScreenUpdating = False: acelera el proceso por lotes al ocultar la ventana del documento durante la ejecución.

ADVERTISEMENT

Cómo funciona el bucle de carpetas de VBA y qué necesita antes de empezar

VBA usa la función Dir para encontrar todos los archivos que coinciden con un patrón como “docx” dentro de una ruta de carpeta que usted especifique. El script abre cada archivo con Documents.Open, ejecuta su código personalizado en el documento activo y luego cierra el archivo con Close SaveChanges:=wdSaveChanges. Este bucle se repite hasta que no existan más archivos coincidentes.

Antes de ejecutar esta macro, debe habilitar la pestaña Desarrollador en Word. Vaya a Archivo > Opciones > Personalizar cinta de opciones y marque Desarrollador en el panel derecho. También debe establecer el nivel de seguridad de macros para permitir macros firmadas digitalmente o habilitar todas las macros temporalmente. Vaya a Desarrollador > Seguridad de macros y seleccione Habilitar todas las macros. Vuelva a cambiar esta opción después de ejecutar la macro por lotes para proteger su sistema.

La ruta de la carpeta en la macro debe usar barras invertidas dobles o barras diagonales. Ejemplo: C:\\Users\\YourName\\Documents\\Reports\\. La carpeta debe contener solo los documentos que desea procesar. Haga una copia de seguridad de la carpeta antes de ejecutar la macro por primera vez.

Pasos para crear y ejecutar una macro de VBA que procese todos los documentos de una carpeta

  1. Abra el Editor de VBA
    Presione Alt+F11 en Word. Esto abre la ventana de Microsoft Visual Basic for Applications.
  2. Inserte un nuevo módulo
    En el panel Explorador de proyectos, haga clic derecho en Normal o en su documento actual. Seleccione Insertar > Módulo. Aparece una ventana de código en blanco.
  3. Pegue el código de plantilla del bucle de carpetas
    Copie y pegue el siguiente código en la ventana del módulo:
    Sub ProcessAllDocsInFolder()
        Dim folderPath As String
        Dim fileName As String
        Dim doc As Document
        
        ' Change this path to your target folder
        folderPath = "C:\Users\YourName\Documents\Reports\"
        
        fileName = Dir(folderPath & "docx")
        
        Application.ScreenUpdating = False
        
        Do While fileName <> ""
            Set doc = Documents.Open(folderPath & fileName)
            
            ' Your custom macro code goes here
            ' Example: change all headings to bold
            ' ActiveDocument.Content.Font.Bold = True
            
            doc.Close SaveChanges:=wdSaveChanges
            fileName = Dir()
        Loop
        
        Application.ScreenUpdating = True
    End Sub
    
  4. Edite la ruta de la carpeta
    Reemplace la ruta en folderPath = "..." con la ubicación real de la carpeta en su equipo. Use barras invertidas dobles entre los nombres de las carpetas.
  5. Agregue el código de su macro entre Open y Close
    Reemplace la línea de comentario con el código de VBA real que desea ejecutar en cada documento. Por ejemplo, para agregar una marca de agua de la empresa, inserte:
        With ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary)
            .Shapes.AddTextEffect msoTextEffect1, "CONFIDENTIAL", "Arial", 36, _
                msoFalse, msoFalse, 0, 0
        End With
    
  6. Ejecute la macro
    Presione F5 mientras el cursor está dentro del sub ProcessAllDocsInFolder. Word abrirá cada archivo, aplicará su código, guardará los cambios y cerrará el archivo. La pantalla no parpadeará porque ScreenUpdating está desactivado.
  7. Verifique los resultados
    Abra algunos documentos de la carpeta para verificar que la macro aplicó los cambios correctamente. Si los cambios son incorrectos, restaure desde su copia de seguridad y ajuste el código.

Método alternativo: usar un cuadro de diálogo de archivos para seleccionar la carpeta

Si prefiere no codificar de forma fija la ruta de la carpeta, use el objeto FileDialog. Esto permite que el usuario elija una carpeta cada vez que se ejecuta la macro. Agregue este código antes de la línea Dir:

    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
    If fd.Show = -1 Then
        folderPath = fd.SelectedItems(1) & "\"
    Else
        Exit Sub
    End If

Este enfoque funciona bien cuando comparte la macro con colegas que almacenan documentos en ubicaciones diferentes.

ADVERTISEMENT

Problemas comunes al ejecutar una macro en todos los documentos de una carpeta

Word bloquea la macro con una advertencia de seguridad

Si la macro no se ejecuta y Word muestra un aviso de seguridad, el archivo proviene de una ubicación no confiable. Mueva los documentos a una carpeta de confianza. Vaya a Archivo > Opciones > Centro de confianza > Configuración del Centro de confianza > Ubicaciones de confianza. Agregue la ruta de la carpeta a la lista. Word permitirá entonces que las macros se ejecuten en los archivos de esa carpeta.

La macro se detiene después de un error en un archivo

Un documento dañado o un archivo abierto en Vista protegida puede interrumpir el bucle. Agregue manejo de errores dentro del bucle para omitir los archivos problemáticos. Inserte esta línea después de Set doc = Documents.Open(...):

    On Error Resume Next

Coloque On Error GoTo 0 después de la línea Close para restaurar el manejo normal de errores. Esto permite que la macro continúe con el siguiente archivo aunque uno falle.

La macro no procesa archivos .docm ni .dotx

El patrón "docx" solo coincide con documentos estándar de Word. Para incluir documentos habilitados para macros, cambie el patrón a "docm". Para plantillas, use "dotx" o "dotm". También puede recorrer varios patrones anidando la llamada Dir dentro de un bucle For Each sobre una matriz de extensiones.

Bucle de carpetas de VBA frente a apertura y aplicación manual

Elemento Bucle de carpetas de VBA Apertura y aplicación manual
Tiempo por cada 100 documentos 2 a 5 minutos según la complejidad de la macro 60 a 90 minutos
Consistencia El mismo código se ejecuta en cada archivo sin error humano Riesgo de omitir pasos o aplicar cambios de forma inconsistente
Manejo de errores Puede omitir archivos dañados automáticamente Requiere solución de problemas manual para cada error
Esfuerzo de configuración Escriba la macro una vez Repita los mismos pasos para cada documento
Flexibilidad Es fácil modificar la macro para manejar subcarpetas o distintos tipos de archivo No es posible automatizar

Ahora puede automatizar tareas repetitivas de formato o contenido en toda una carpeta de documentos de Word. Comience probando la macro en un conjunto pequeño de archivos de copia de seguridad. Una vez que el código funcione correctamente, aplíquelo a la carpeta completa. Use la instrucción On Error Resume Next para manejar errores inesperados de archivos sin detener el proceso por lotes.

ADVERTISEMENT