Я пытаюсь разобрать текстовый документ с помощью VBA и вернуть путь, указанный в текстовом файле.
Например, текстовый файл будет выглядеть так:
*Blah blah instructions
*Blah blah instructions on line 2
G:\\Folder\...\data.xls
D:\\AnotherFolder\...\moredata.xls
Я хочу, чтобы VBA загружал по 1 строке за раз, а если она начинается с *
, переходите к следующей строке (подобно тому, как прокомментирована эта строка). Для строк с файловым путем я хочу написать этот путь к ячейке, скажем A2
для первого пути, B2
для следующего и т.д.
Главными вещами, на которые я надеялся, были:
1. Каков наилучший/простой способ чтения текстового файла с помощью VBA?
2. Как я могу сделать это по строкам?
для наиболее простого чтения текстового файла используйте open
Пример:
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
Я нахожу FileSystemObject с TxtStream самым простым способом читать файлы
Dim fso As FileSystemObject: Set fso = New FileSystemObject
Set txtStream = fso.OpenTextFile(filePath, ForReading, False)
Затем с помощью этого объекта txtStream
у вас есть всевозможные инструменты, которые intellisense выбирает (в отличие от метода FreeFile()
), поэтому есть меньше догадок. Кроме того, вам не нужно назначать FreeFile и надеяться, что он на самом деле свободен, поскольку когда вы его назначили.
Вы можете прочитать файл, например:
Do While Not txtStream.AtEndOfStream
txtStream.ReadLine
Loop
txtStream.Close
ПРИМЕЧАНИЕ. Для этого требуется ссылка на исполняемый файл Microsoft Scripting Runtime.
txtStream
как объекта TextStream
не будет смысла
Для полноты; работа с данными, загруженными в память;
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
Вы можете использовать этот код для чтения строки за строкой в текстовом файле, и вы также можете проверить, что первый символ "*", тогда вы можете оставить это.
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