(VBA)通过TextStream将txt文件作为FileSystemObject读取会引发错误

时间:2018-08-27 06:52:54

标签: excel vba filesystemobject

我正在编写一个makro来读取数千个大文本文件,分析它们的内容并将其内容的所需部分保存到Excel工作表中。 在另一个线程上,它说TextStream对象的readAll方法是实现此目的的好方法,因此我复制了一段代码,并围绕它构建了makro。 尽管每数百个文本文件都会引发一个奇怪的错误。我的makro正在清空正在处理的文件,并且makro停止工作。 再说一次:在我启动makro之前,引发错误的文本文件中包含内容(据我所知,它看起来像其他任何文本文件一样),但是当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 :(得分:0)

由于您使用相同的文件名进行读写,因此在每次操作后都应将其关闭:

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