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 bucleDo 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 GoTopara detectar archivos faltantes o problemas de permisos.
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.
- 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. EscribaDim fileNum As Integer: fileNum = FreeFilepara reservar un número de archivo. - Abra el archivo en modo Input
UseOpen "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. - Lea el archivo línea por línea
Use un bucleDo While Not EOF(fileNum). Dentro del bucle, useLine Input #fileNum, lineTextpara leer una línea en una variable de cadena. Procese cada línea según sea necesario. - Cierre el archivo
Después de que finalice el bucle, useClose #fileNumpara liberar el archivo. Cierre siempre el archivo incluso si se produce un error colocando la instrucción de cierre en el controlador de errores. - Agregue control de errores
Envuelva el código enOn Error GoTo ErrHandler. En la etiquetaErrHandler, 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
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.
- Cree el FileSystemObject
UseDim 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. - Compruebe si el archivo existe
UseIf fso.FileExists(filePath) Thenpara evitar errores en tiempo de ejecución. Si el archivo no existe, salga del sub o muestre un mensaje. - Abra el archivo como una secuencia de texto
UseSet ts = fso.OpenTextFile(filePath, ForReading). La constanteForReadingtiene un valor de 1. También puede especificar el formato:ForReading, False, TristateTruepara Unicode. - Lea el contenido
Usets.ReadAllpara leer todo el archivo en una cadena, o usets.ReadLinedentro de un bucle conDo While Not ts.AtEndOfStreampara la lectura línea por línea. - Cierre la secuencia de texto y libere el objeto
Usets.Closey luegoSet ts = Nothing: Set fso = Nothingpara 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.
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.