VBA – Leer Archivo de Texto Línea por Línea
Este tutorial demostrará cómo leer contenido de archivos de texto línea por línea con VBA.
Podemos leer el archivo de texto como un archivo completo, o línea por línea.
Leer Archivo de Texto Línea por Línea
El texto en un archivo de texto generalmente está compuesto por varias líneas, separadas por delimitadores. Estos pueden ser una coma («,»), una coma con espacio («, «), un punto y coma («;»), un punto y coma con espacio («; «), un espacio (» «), un tabulador (vbTab) o en casos raros cualquier otro carácter como una tilde (~). Las líneas se separan normalmente con un salto de línea (vbCRLF).
La forma más sencilla de leer un fichero de texto línea a línea en nuestra Hoja de Cálculo en VBA es seleccionar la primera celda donde queremos que se ponga el texto, y a continuación ejecutar el siguiente código:
Sub LeerArchivo()
Dim strFile As String, strLine As String
strFile = "C:\Carpeta VBA\TextFile.txt"
Open strFile For Input As #1
Do Until EOF(1)
Line Input #1, strLine
ActiveCell = strLine
ActiveCell.Offset(1, 0).Select
Loop
Close #1
End Sub
Esto pondrá cada línea del archivo de texto en una sola celda en Excel.
También podemos leer un archivo de texto en VBA utilizando el FileSystemObject. En el siguiente código hemos utilizado la vinculación tardía con el Objeto Sistema de Archivo. También puedes crear una referencia a él en tu proyecto VBA. Vea aquí para más información.
Sub LeerArchivoDeTexto()
Dim strLine As String
Dim FSO As Object
Dim TSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TSO = FSO.OpenTextFile("C:\Carpeta VBA\TextFile.txt")
Do While Not TSO.AtEndOfStream
strLine = TSO.ReadLine
ActiveCell = strLine
ActiveCell.Offset(1, 0).Select
Loop
TSO.Close
Set TSO = Nothing
Set FSO = Nothing
End Sub
Podemos crear un bucle un poco más complicado si queremos separar las líneas en celdas por sus delimitadores. Aquí hemos utilizado la vinculación anticipada en el código y declarado el Objeto Sistema de Archivos.
Sub LeerArchivoDeTextoConSeparadores()
Dim StrLine As String
Dim FSO As New FileSystemObject
Dim TSO As Object
Dim StrLineElements As Variant
Dim Index As Long
Dim i As Long
Dim Delimiter As String
Set FSO = CreateObject("Scripting.FileSystemObject")
Set TSO = FSO.OpenTextFile("C:\Carpeta VBA\TextFile.txt")
Delimiter = ";"
Index = 1
Do While TSO.AtEndOfStream = False
StrLine = TSO.ReadLine
StrLineElements = Split(StrLine, Delimiter)
For i = LBound(StrLineElements) To UBound(StrLineElements)
Cells(Index, i + 1).Value = StrLineElements(i)
Next i
Index = Index + 1
Loop
TSO.Close
Set TSO = Nothing
Set FSO = Nothing
End Sub
Esto hará que las líneas se separen en celdas individuales en Excel como se muestra en el siguiente gráfico.