VBA(Visual Basic for Applications)是一种用于创建自动化应用程序的开发语言,它可以帮助我们更快捷地完成工作。VBA 可以帮助我们读取文件,这样就可以更快地处理大量数据。
VBA 读取文件的方法有很多,其中最常用的是使用 Open 和 Input 函数。Open 函数用于打开文件,Input 函数用于读取文件中的内容。下面是一个使用 VBA 读取文本文件的例子:
Sub ReadFile() Dim FileName As String Dim FileNumber As Integer FileName = "C:\My Documents\MyFile.txt" FileNumber = FreeFile() Open FileName For Input As #FileNumber Do Until EOF(FileNumber) Line Input #FileNumber, TextLine 'Do something with the text line here. Loop Close #FileNumber End Sub
你已经从前面的章节里知道了如何使用VBA打开一个电子表格,例如指令:
Application.Workbooks.Open Filename:= "C:ExcelReport.xls"
打开位于文件夹C:Excel里面的文件Report.xls。除了使用专门的应用程序打开文件之外,你如果也想要创建VBA过程能够打开其它类型的文件并使用它们的内容的话,你就应该学习一些关于被称为低级别的文件I/O(input/output)。接下来关于顺序,随机和二进制文件的章节将会带你直接接触你的数据。
你的电脑硬盘上有成百上千的顺序文件。参数文件,错误日志,HTML文件以及所有类型的无格式文本文件都是顺序文件。这些文件以字母顺序在硬盘上储存。新文本行的开始以两个专门的字符表示,一个叫做carriage return (回车),另一个叫line feed(换行)。当你使用顺序文件时,你从文件的开头始,一个字符一个字符的向前移动,一行接一行,直到文件的结尾。顺序文件容易打开和操作,任何文本编辑器都可以。
技巧:什么是顺序文件?
顺序文件就是访问它里面的记录时必须按它占据的顺序进行的文件,这意味着在你想访问第三个记录之前,你必须先访问第一个记录,接着是第二个记录。
技巧:使用Open语句打开文件
当你使用顺序访问来打开一个文件时,该文件必须是已经存在的。
Open pathname For mode [Access access][lock] As [#]filenumber [Len=reclength]
Open语句有三个必须的参数,它们是pathname, mode, 和 filenumber。上面的语法里,这三个参数前面都有用粗体显示的关键字。Open "C:Autoexec.bat" For Input As #1
如果某文件已经打开输入了,那么从它读取数据。在打开一格顺序文件后,你就可以使用下面的语句读取它的内容:Line Input #或者 Input # 或者使用Input 函数。使用下面的语句来逐行读取Autoexec.bat或者其它任何顺序文件里的内容:
Line Input #filenumber, variableName
#filenumber是用Open语句打开文件时使用的数字,variableName是个String或者Variant变量,用来储存读取的行。
Line Input #语句仅读取一开启顺序文件里的一行并且储存在一变量里。记住,Line Input # 语句一次读取顺序文件里的一个字符,直到它遇到回车字符(Chr(13))或者回车-换行字符(Chr(13)& Chr(10))。这些字符(回车,换行)在读取过程中返回的文本里是会忽略掉的。
接下来的过程ReadMe示范如何使用Open和Line Input #语句逐行读取Autoexec.bat文件的内容。试试用同样的方法来读取其它顺序文件。
1. 在当前工程里面插入新模块并重命名为SeqFiles
2. 输入下列过程ReadMe:
Sub ReadMe()
Dim rLine As String
Dim i As Integer " line number
i = 1
Open "C:Autoexec.bat" For Input As #1
" stay inside the loop until the end of file is reached
Do While Not EOF(1)
Line Input #1, rLine
MsgBox "Line " & i & " in Autoexec.bat reads: " _
& Chr(13) & Chr(13) & rLine
i = i + 1
Loop
MsgBox i & " lines were read."
Close #1
End Sub
3. 按下F8,逐句运行该过程
为了读取内容,过程ReadMe将文件Autoexec.bat在模式Input里作为文件号码1打开。Do…While循环告诉VB一直执行循环里面的语句,直到到达文件结尾。文件的结尾由函数EOF的结果决定。
EOF函数当下个要读取的字符已经过了文件结尾时,返回逻辑值True。注意,EOF要求一个参数——你要检查的打开了的文件号码,是前面Open语句使用的同一个数字。使用EOF函数来确保VB不会超出文件结尾处。
Line Input # 语句将每行内容储存于变量rLine里,然后,信息框显示行号和它的内容。之后如果函数EOF的结果还是为假(还未到达文件结尾处)的话,VBA给行计数器增加1,并且开始读取下一行。当函数EOF结果为真是,VB就会退出循环。在VBA结束前,还会再运行两条语句,显示读取行的总数,以及关闭该打开的文件。
本节介绍了其它的一些ASP.NETWebPages帮助器。 ASP.NET 帮助器 - 对象参考手册Analytics 对象参考手册(Google) Helper描述Anal...
Lua 提供了 debug 库用于提供创建我们自定义调速器的功能。Lua 本身并未有内置的调速器,但很多开发者共享了他们的 Lua 调速器代...
Time 类在 Ruby 中用于表示日期和时间。它是基于操作系统提供的系统日期和时间之上。该类可能无法表示 1970 年之前或者 2038 年...
什么是 XML ? XML 指可扩展标记语言(eXtensible Markup Language)。可扩展标记语言,标准通用标记语言的子集,一种用于标记电...