Cómo leer archivos externos usando VBA en Word
🔍 WiseChecker

Cómo leer archivos externos usando VBA en Word

Puede automatizar Word para leer datos de archivos externos, como archivos de texto, archivos CSV u otros documentos de Word, sin abrir cada uno manualmente. Esto es útil cuando necesita importar grandes cantidades de datos, generar informes o procesar información por lotes. La instrucción Open de VBA y el FileSystemObject proporcionan dos métodos confiables para leer contenido externo. Este artículo explica ambos enfoques y le muestra cómo escribir el código VBA paso a paso.

Puntos clave: Leer archivos externos con VBA en Word

  • Instrucción Open con modo Input: Lea archivos de texto o CSV línea por línea usando el comando Line Input # dentro de un bucle Do While.
  • FileSystemObject (FSO): Use CreateObject("Scripting.FileSystemObject") para abrir, leer y cerrar archivos con un control más orientado a objetos.
  • Ruta de archivo y control de errores: Proporcione siempre la ruta completa del archivo y use On Error GoTo para detectar archivos faltantes o problemas de permisos.

ADVERTISEMENT

Descripción general de la lectura de archivos externos con VBA

VBA en Word puede leer archivos externos usando dos métodos principales: la instrucción Open integrada y el FileSystemObject (FSO) de la biblioteca Scripting Runtime. La instrucción Open es nativa de VBA y no requiere referencias adicionales. Funciona bien para archivos de texto, archivos CSV y archivos de registro. El FileSystemObject ofrece más flexibilidad, como comprobar si un archivo existe antes de leerlo, y admite leer archivos completos a la vez o línea por línea.

Antes de escribir el código, debe conocer la ruta completa del archivo externo. Por ejemplo, C:\Data\Report.txt o \\Server\Share\Data.csv. También debe decidir si leer el archivo línea por línea o como una sola cadena. La lectura línea por línea es útil para datos estructurados como archivos CSV, donde cada línea representa un registro. Leer el archivo completo a la vez es más rápido para archivos pequeños que desea insertar directamente en un documento de Word.

Ambos métodos requieren que cierre el archivo después de leerlo para liberar recursos del sistema. No cerrar un archivo puede provocar fugas de memoria o problemas de bloqueo de archivos. Los ejemplos de este artículo incluyen el cierre correcto del archivo y un control básico de errores.

Pasos para leer un archivo de texto usando la instrucción Open

La instrucción Open es la forma más sencilla de leer un archivo de texto en VBA. Especifique la ruta del archivo, el modo (Input, Output, Append o Binary) y un número de archivo. Use la función FreeFile para obtener automáticamente el siguiente número de archivo disponible.

  1. Declare variables y obtenga un número de archivo libre
    Abra el editor de VBA en Word presionando Alt+F11. Inserte un nuevo módulo desde Insertar > Módulo. Escriba Dim fileNum As Integer: fileNum = FreeFile para reservar un número de archivo.
  2. Abra el archivo en modo Input
    Use Open "C:\Data\Report.txt" For Input As #fileNum. Esto abre el archivo solo para lectura. Si el archivo no existe, VBA genera un error en tiempo de ejecución.
  3. Lea el archivo línea por línea
    Use un bucle Do While Not EOF(fileNum). Dentro del bucle, use Line Input #fileNum, lineText para leer una línea en una variable de cadena. Procese cada línea según sea necesario.
  4. Cierre el archivo
    Después de que finalice el bucle, use Close #fileNum para liberar el archivo. Cierre siempre el archivo incluso si se produce un error colocando la instrucción de cierre en el controlador de errores.
  5. Agregue control de errores
    Envuelva el código en On Error GoTo ErrHandler. En la etiqueta ErrHandler, cierre el archivo si está abierto y muestre un mensaje.

Código de ejemplo para el procedimiento completo:

Sub ReadTextFile()
    Dim fileNum As Integer
    Dim lineText As String
    Dim filePath As String
    filePath = "C:\Data\Report.txt"
    On Error GoTo ErrHandler
    fileNum = FreeFile
    Open filePath For Input As #fileNum
    Do While Not EOF(fileNum)
        Line Input #fileNum, lineText
        ' Process lineText here
        Debug.Print lineText
    Loop
    Close #fileNum
    Exit Sub
ErrHandler:
    If fileNum > 0 Then Close #fileNum
    MsgBox "Error reading file: " & Err.Description
End Sub

ADVERTISEMENT

Pasos para leer un archivo usando FileSystemObject

El FileSystemObject proporciona un enfoque orientado a objetos. Cree una instancia del objeto, abra una secuencia de texto y lea el contenido. Este método le permite comprobar si el archivo existe antes de intentar leerlo.

  1. Cree el FileSystemObject
    Use Dim fso As Object: Set fso = CreateObject("Scripting.FileSystemObject"). No agregue una referencia a la biblioteca Scripting Runtime a menos que prefiera la vinculación temprana.
  2. Compruebe si el archivo existe
    Use If fso.FileExists(filePath) Then para evitar errores en tiempo de ejecución. Si el archivo no existe, salga del sub o muestre un mensaje.
  3. Abra el archivo como una secuencia de texto
    Use Set ts = fso.OpenTextFile(filePath, ForReading). La constante ForReading tiene un valor de 1. También puede especificar el formato: ForReading, False, TristateTrue para Unicode.
  4. Lea el contenido
    Use ts.ReadAll para leer todo el archivo en una cadena, o use ts.ReadLine dentro de un bucle con Do While Not ts.AtEndOfStream para la lectura línea por línea.
  5. Cierre la secuencia de texto y libere el objeto
    Use ts.Close y luego Set ts = Nothing: Set fso = Nothing para liberar memoria.

Código de ejemplo para leer un archivo completo en un documento de Word:

Sub ReadFileWithFSO()
    Dim fso As Object
    Dim ts As Object
    Dim filePath As String
    Dim fileContent As String
    filePath = "C:\Data\Report.txt"
    Set fso = CreateObject("Scripting.FileSystemObject")
    If Not fso.FileExists(filePath) Then
        MsgBox "File not found: " & filePath
        Exit Sub
    End If
    Set ts = fso.OpenTextFile(filePath, 1, False, 0) ' 1 = ForReading, 0 = ASCII
    fileContent = ts.ReadAll
    ts.Close
    ' Insert content into the active document
    ActiveDocument.Content.InsertAfter fileContent
    Set ts = Nothing
    Set fso = Nothing
End Sub

Errores comunes al leer archivos externos

Archivo no encontrado o ruta incorrecta

El error más frecuente es una ruta de archivo incorrecta. Use siempre la ruta absoluta completa. Si la ruta contiene espacios, enciérrela entre comillas dentro de la cadena de VBA. Use Dir(filePath) para verificar que el archivo existe antes de abrirlo.

Olvidar cerrar el archivo

Si no cierra un archivo abierto con la instrucción Open, el archivo permanece bloqueado hasta que cierre Word. Esto puede impedir que otros programas accedan al archivo. Cierre siempre el archivo en el controlador de errores como se muestra en los ejemplos.

Leer un archivo binario como texto

Los métodos descritos anteriormente solo funcionan para archivos de texto sin formato. Si intenta leer un archivo binario como .docx o .xlsx, el resultado será ilegible. Para archivos binarios, use el modo Binary con la instrucción Open y lea matrices de bytes.

Errores de permiso denegado

Si el archivo externo está abierto en otro programa o está marcado como de solo lectura en un recurso compartido de red, VBA puede devolver un error de permisos. Compruebe los permisos del archivo y asegúrese de que ningún otro proceso tenga el archivo bloqueado.

ADVERTISEMENT

Instrucción Open frente a FileSystemObject: diferencias clave

Elemento Instrucción Open FileSystemObject
Requiere referencia No No (vinculación tardía) o Scripting Runtime (vinculación temprana)
Comprobación de existencia del archivo No integrada; use la función Dir. Método FileExists integrado
Leer todo el archivo a la vez Posible con la función Input, pero limitado a 65535 caracteres Sí, con ReadAll
Lectura línea por línea Sí, con Line Input Sí, con ReadLine
Compatibilidad con archivos binarios Sí, usando el modo Binary. No directamente; requiere métodos adicionales
Rendimiento en archivos grandes Más lento línea por línea Más rápido con ReadAll para archivos de menos de 100 MB

Ahora puede leer archivos de texto externos desde Word usando VBA con la instrucción Open o el FileSystemObject. Elija el FileSystemObject cuando necesite comprobar la existencia del archivo o leer todo el contenido rápidamente. Use la instrucción Open para scripts más sencillos o cuando trabaje con archivos binarios. Como siguiente paso, intente procesar datos CSV dividiendo cada línea con la función Split e insertando los valores en una tabla de Word. Un consejo avanzado: use GetOpenFilename para que el usuario seleccione el archivo en tiempo de ejecución en lugar de codificar la ruta de forma fija.

ADVERTISEMENT