Cómo recorrer todos los documentos de Word abiertos en VBA
🔍 WiseChecker

Cómo recorrer todos los documentos de Word abiertos en VBA

Si trabaja con varios documentos de Word a la vez, es posible que necesite aplicar el mismo formato, extraer datos o ejecutar una macro en todos los archivos abiertos. Cambiar manualmente entre documentos y repetir la misma acción desperdicia tiempo e introduce errores. Las macros de VBA pueden automatizar esta tarea recorriendo la colección Documents. Este artículo explica cómo usar el bucle For Each con el objeto Documents para procesar cada documento abierto en Word. Aprenderá la sintaxis, un ejemplo funcional y qué tener en cuenta al escribir estas macros.

Puntos clave: Recorrer documentos de Word abiertos en VBA

  • Colección Documents: Use For Each doc In Application.Documents para hacer referencia a todos los documentos abiertos actualmente.
  • Activate vs referencia directa: Evite doc.Activate a menos que sea necesario; use doc.Content directamente para mayor velocidad.
  • Manejo de errores: Verifique doc.Saved y envuelva en On Error Resume Next para omitir documentos no guardados o protegidos.

ADVERTISEMENT

Entender la colección Documents en Word VBA

Word VBA almacena cada documento abierto en la colección Documents. Esta colección es parte del objeto Application. Cada documento de la colección es un objeto Document. La colección se basa en cero o en uno según cómo se acceda, pero el bucle For Each lo maneja automáticamente. No necesita saber el número de índice. El bucle se ejecuta una vez por cada documento abierto, incluidos los documentos nuevos en blanco que no se han guardado.

Requisitos previos para usar esta macro

Antes de escribir la macro, debe tener la pestaña Desarrollador visible en Word. Para habilitar la pestaña Desarrollador, vaya a Archivo > Opciones > Personalizar cinta de opciones y marque Desarrollador en la columna derecha. También necesita familiaridad básica con el editor de VBA. Presione Alt+F11 para abrir el editor. Inserte un nuevo módulo haciendo clic en Insertar > Módulo. Todo el código de este artículo va en un módulo estándar.

Estructura básica del bucle

El bucle principal usa la palabra clave For Each. La variable doc se declara como un objeto Document. El bucle itera sobre Application.Documents. Dentro del bucle, puede leer o modificar propiedades de doc. La macro finaliza cuando se procesa el último documento.

Pasos para escribir un bucle que procese todos los documentos abiertos

Siga estos pasos para crear una macro de VBA que recorra cada documento abierto en Word. La macro de ejemplo cuenta el número de párrafos en cada documento y muestra el resultado en un cuadro de mensaje.

  1. Abrir el Editor de VBA
    Presione Alt+F11 en Word. Se abre el editor de Visual Basic para Aplicaciones. Si el Explorador de proyectos no está visible, presione Ctrl+R para mostrarlo.
  2. Insertar un nuevo módulo
    En el Explorador de proyectos, haga clic con el botón derecho en Normal o en su proyecto actual, luego haga clic en Insertar > Módulo. Aparece una ventana de código en blanco.
  3. Declarar el procedimiento Sub
    Escriba Sub LoopAllDocuments() y presione Entrar. El editor agrega automáticamente la línea End Sub.
  4. Declarar la variable de documento
    Dentro del sub, escriba Dim doc As Document. Esta variable contendrá cada documento abierto uno a la vez.
  5. Escribir el bucle For Each
    Escriba For Each doc In Application.Documents. Esto inicia el bucle. Presione Entrar y escriba el código que se ejecuta para cada documento.
  6. Agregar acciones dentro del bucle
    Escriba MsgBox doc.Name & " has " & doc.Paragraphs.Count & " paragraphs.". Esta línea muestra el nombre del documento y el recuento de párrafos.
  7. Cerrar el bucle
    Escriba Next doc. Esto le indica a VBA que pase al siguiente documento de la colección.
  8. Ejecutar la macro
    Presione F5 mientras el cursor está dentro del sub. Word procesa cada documento abierto y muestra un cuadro de mensaje para cada uno. Haga clic en Aceptar para pasar al siguiente documento.

ADVERTISEMENT

Errores comunes y limitaciones al recorrer documentos

Varios problemas pueden causar errores o comportamientos inesperados al ejecutar esta macro. Comprender estos problemas le ayuda a escribir código robusto.

Word se bloquea cuando el bucle modifica la colección Documents

Si su macro intenta cerrar o abrir un documento dentro del bucle, la colección Documents cambia durante la iteración. Esto puede causar un error en tiempo de ejecución o un bloqueo. Para evitarlo, recopile los nombres de los documentos en una matriz primero, luego recorra la matriz. Por ejemplo:

Sub CloseAllExceptOne()
    Dim doc As Document
    Dim docNames() As String
    Dim i As Integer
    
    ReDim docNames(Application.Documents.Count - 1)
    i = 0
    For Each doc In Application.Documents
        docNames(i) = doc.Name
        i = i + 1
    Next doc
    
    For i = LBound(docNames) To UBound(docNames)
        If docNames(i) <> "KeepMe.docx" Then
            Documents(docNames(i)).Close SaveChanges:=wdDoNotSaveChanges
        End If
    Next i
End Sub

El bucle falla cuando un documento está protegido o es de solo lectura

Un documento con restricciones de edición puede generar un error si la macro intenta modificar su contenido. Use On Error Resume Next antes de la modificación y verifique Err.Number después. Alternativamente, verifique la propiedad ProtectionType del documento. Si doc.ProtectionType <> wdNoProtection, omita ese documento o desprotéjalo con una contraseña conocida.

La macro se ejecuta lentamente con muchos documentos abiertos

Activar cada documento con doc.Activate dentro del bucle ralentiza significativamente la macro. Word debe redibujar la pantalla para cada cambio de documento. Establezca Application.ScreenUpdating = False al inicio de la macro y restáurelo a True al final. También establezca Application.DisplayAlerts = False para suprimir mensajes.

Métodos de bucle en VBA: For Each vs For Index

Elemento For Each doc In Documents For i = 1 To Documents.Count
Sintaxis Más simple, no necesita índice Requiere variable de índice y acceso manual
Velocidad Más rápido para la mayoría de las operaciones Ligeramente más lento debido a la búsqueda de índice
Seguridad con eliminación Se rompe si se eliminan documentos durante el bucle Debe ajustar el índice o recorrer hacia atrás
Legibilidad Claro y autodocumentado Más verboso
Caso de uso Operaciones de solo lectura o modificaciones Cuando necesita cerrar o eliminar documentos

Ahora puede escribir una macro de VBA que recorra todos los documentos de Word abiertos y aplique cualquier acción que necesite. Comience con el bucle simple For Each para leer datos. Para operaciones que cambian la colección de documentos, use el bucle basado en índice con una matriz. Siempre deshabilite la actualización de pantalla y las alertas de visualización para mejorar el rendimiento. Como consejo avanzado, combine el bucle con una instrucción Select Case dentro para aplicar una lógica diferente según el nombre del documento o el tipo de contenido.

ADVERTISEMENT