Ler / processar o ficheiro de texto linha a linha na VBA

estou a tentar processar um documento de texto usando o VBA e devolver a localização indicada no ficheiro de texto.
Por exemplo, o ficheiro de texto pareceria com:

*Blah blah instructions
*Blah blah instructions on line 2
G:\\Folder\...\data.xls
D:\\AnotherFolder\...\moredata.xls

quero que o VBA carregue uma linha de cada vez, e se começar com um *, então passe para a linha seguinte (semelhante à linha que está a ser comentada). Para as linhas com um caminho de arquivo, eu quero escrever esse caminho para a célula, diga A2 para o primeiro caminho, B2 para o próximo, etc.

As principais coisas que esperava ter respondido foram: 1. Qual é a melhor e simples maneira de ler através de um arquivo de texto usando VBA?
2. Como posso fazer isso linha a linha?

Author: L42, 2012-07-17

4 answers

Para a leitura mais básica de um ficheiro de texto, use open

Exemplo:

Dim FileNum As Integer
Dim DataLine As String

FileNum = FreeFile()
Open "Filename" For Input As #FileNum

While Not EOF(FileNum)
    Line Input #FileNum, DataLine ' read in data 1 line at a time
    ' decide what to do with dataline, 
    ' depending on what processing you need to do for each case
Wend
 58
Author: SeanC, 2013-03-05 14:07:46

Eu acho o FileSystemObject com um TxtStream a maneira mais fácil de ler arquivos

Dim fso As FileSystemObject: Set fso = New FileSystemObject
Set txtStream = fso.OpenTextFile(filePath, ForReading, False)
Então com este objeto você tem todos os tipos de ferramentas que intellisense pega (ao contrário do método de FreeFile() para que haja menos adivinhação. Além disso, você não' tem que atribuir um FreeFile e espero que ele ainda é realmente livre desde quando você o atribuiu.

Podes ler um ficheiro como:

Do While Not txtStream.AtEndOfStream
    txtStream.ReadLine
Loop
txtStream.Close

Nota: Isto requer uma referência ao tempo de execução de programação da Microsoft.

 33
Author: Brad, 2016-09-13 13:28:38

Para completar; trabalhar com os dados carregados na memória;

dim hf As integer: hf = freefile
dim lines() as string, i as long

open "c:\bla\bla.bla" for input as #hf
    lines = Split(input$(LOF(hf), #hf), vbnewline)
close #hf

for i = 0 to ubound(lines)
    debug.? "Line"; i; "="; lines(i)
next
 27
Author: Alex K., 2012-07-18 13:06:39

Você pode usar este código para ler linha por linha em arquivo de texto e você também pode verificar sobre o primeiro personagem é"*", então você pode deixar isso..

Public Sub Test()

    Dim ReadData as String

    Open "C:\satheesh\myfile\file.txt" For Input As #1

    Do Until EOF(1) 
       Line Input #1, ReadData 'Adding Line to read the whole line, not only first 128 positions
    If Not Left(ReadData, 1) = "*" then
       '' you can write the variable ReadData into the database or file
    End If 

    Loop

    Close #1

End Sub
 3
Author: satheesh kumar, 2015-04-29 16:22:13