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.
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
- Abra el Editor de VBA
Presione Alt+F11 en Word. Esto abre la ventana de Microsoft Visual Basic for Applications. - 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. - 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 - Edite la ruta de la carpeta
Reemplace la ruta enfolderPath = "..."con la ubicación real de la carpeta en su equipo. Use barras invertidas dobles entre los nombres de las carpetas. - 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 - Ejecute la macro
Presione F5 mientras el cursor está dentro del subProcessAllDocsInFolder. Word abrirá cada archivo, aplicará su código, guardará los cambios y cerrará el archivo. La pantalla no parpadeará porqueScreenUpdatingestá desactivado. - 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.
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.