Access 2016:我的目标是使用Access VBA简单地读入文本文件。我使用了FileOpen函数{FileOpen(1,“TESTFILE”,OpenMode.Input)},但是只要我输入“FileOpen(”并且我立即得到立即编译错误,它就不会提示参数完成。尝试使用FileSystemObject OpenTextFile方法,但它也没有编译(我确实将Runtime Scripting库添加到我的引用列表中。)想法?
答案 0 :(得分:3)
在VBA中有两种主要的方法来读取文本文件 - Scripting.FileSystemObject
(a.k.a。文本流)和Open
。
虽然代码看起来有点丑陋,但我更喜欢使用Open
... As #
,原因如下:
以下两种不同的方法可以做同样的事情:
Public Function GetFileContentsByLine(fileName As String) As String
Dim ff As Long
Dim thisLine As String
ff = FreeFile
Open fileName For Input As #ff
Do Until EOF(ff)
Input #ff, thisLine
GetFileContentsByLine = GetFileContentsByLine & thisLine & vbCrLf
Loop
Close #ff
End Function
此版本假定您希望一次浏览一行(这是读取文本文件的常规方法)。如果你想一次性阅读全部内容,这不是最快的方式,但它可以让你灵活地在拉入时对各条线作出反应。
对于非常大的文本文件,您可能会遇到Out of memory
错误。这是因为字符串如何添加到内存中的其他字符串。但是,对于典型情况,您不应该遇到任何问题。
Public Function GetFileContents(fileName As String) As String
Dim ff As Long
Dim thisLine() As Byte
ff = FreeFile
Open fileName For Binary As #ff
ReDim thisLine(LOF(ff))
Get #ff, , thisLine
Close #ff
GetFileContents = StrConv(thisLine, vbUnicode)
End Function
此版本计算出文件的大小,在一个大块中抓取整个内容,然后将内容存储为字符串。它比第一种方式更快,但它并不是人们在谈论“阅读文本文件”时通常所说的。
答案 1 :(得分:0)
这是一个如何读取文件并返回内容的示例函数。您将需要对Runtime Scripting库的引用
Function SampleReadFile() As String
Dim fso As FileSystemObject
Dim txtStream As TextStream
Dim strContents As String
'create file system object
Set fso = CreateObject("Scripting.FileSystemObject")
'get the text stream of the file
Set txtStream = fso.OpenTextFile("Path to my file")
'read the contents into a string
strContents = txtStream.ReadAll
'close the text stream
txtStream.Close
'free the memory
Set txtStream = Nothing
Set fso = Nothing
'return the contents of the file
SampleReadFile = strContents
End Function