(VBA) Чтение txt-файла как FileSystemObject через TextStream выдает ошибку - PullRequest
0 голосов
/ 27 августа 2018

Я пишу макро, чтобы читать тысячи больших текстовых файлов, анализировать их содержимое и сохранять желаемую часть его содержимого на моем листе Excel.В другом потоке говорилось, что метод readAll объекта TextStream - хороший способ сделать это, поэтому я скопировал кусок кода и построил вокруг него макро.Каждые несколько сотен текстовых файлов, хотя это выдает странную ошибку.Обрабатываемый файл очищается моим макросом, и макрос перестает работать.Еще раз: перед тем, как запустить макрос, текстовый файл, который выдает ошибку, содержит содержимое (насколько я вижу, он выглядит как любой другой текстовый файл), но когда Excel выдает ошибку, текстовый файл удаляется.

Можете ли вы вспомнить причину этой ошибки или предложить альтернативу, которая теперь может дать эту ошибку?

Function readFileContent(FILENAME As String) As String
'reads the txt file into a string and deletes parts before the first "<TestFlow" Element`
Dim lngStart As Long
Dim lngLength As Long

Dim fsoMyFile As FileSystemObject
Dim tsTempo As TextStream
Dim StrContent As String

lngStart = 0
lngLength = 0

Set fsoMyFile = New FileSystemObject
Set tsTempo = fsoMyFile.OpenTextFile(FILENAME, ForReading)
StrContent = tsTempo.ReadAll

Set tsTempo = fsoMyFile.OpenTextFile(FILENAME, ForWriting, False, TristateFalse)
tsTempo.Write (StrContent)

'Cut of everything up to the first <TextFlow tag

lngStart = InStr(StrContent, "<TextFlow")
        If lngStart = 0 Then
        readFileContent = "SKIPPED"
        End If
lngLength = Len(StrContent)
StrContent = Right(StrContent, lngLength - lngStart)
readFileContent = StrContent

End Function

Строка StrContent = tsTempo.ReadAll - это строка, на которой останавливается программа.Я не получаю сообщение об ошибке.

1 Ответ

0 голосов
/ 27 августа 2018

Поскольку вы используете одно и то же имя файла для чтения и записи, вы должны закрывать его после каждой операции:

Set fsoMyFile = New FileSystemObject
Set tsTempo = fsoMyFile.OpenTextFile(FILENAME, ForReading)
StrContent = tsTempo.ReadAll
tsTempo.Close '// <=== CLOSE

Set tsTempo = fsoMyFile.OpenTextFile(FILENAME, ForWriting, False, TristateFalse)
tsTempo.Write (StrContent)
tsTempo.Close '// <=== CLOSE
...