vba中读写文件的几种方式(vba读取文件的步骤)

你已经从前面的章节里知道了如何使用VBA打开一个电子表格,例如指令:Application.Workbooks.OpenFilename:=“C:\\Excel\\Report.xls”打开位于文件夹

你已经从前面的章节里知道了如何使用VBA打开一个电子表格,例如指令:

Application.Workbooks.Open Filename:= “C:\\Excel\\Report.xls”

打开位于文件夹 C:\\Excel 里面的文件 Report.xls。除了使用专门的应用程序打开文件之外,你如果也想要创建 VBA 过程能够打开其它类型的文件并使用它们的内容的话,你就应该学习一些关于被称为低级别的文件 I/O(input/output)。接下来关于顺序,随机和二进制文件的章节将会带你直接接触你的数据。

vba中读写文件的几种方式(vba读取文件的步骤)

文件访问类型

计算机使用的文件类型有三种:

①顺序访问文件是指按储存相同的顺序找回数据的文件。例如以 CSV 格式(逗号分割文本),TXT 格式(以 Tab 键分割的文本)或者 PRN 格式(以空格分隔的文本)储存的文件。顺序文件访问经常用来写文本文件,例如错误日志,参数设定和报告。顺序文件有下列模式:Input,Output 和 Append。模式决定了文件打开后你如何使用它。

②随机访问文件是文本文件,它的数据以同等长度储存并在一个以逗号分割的区域了。随机访问文件只有一个模式——Random

③二进制访问文件是图形文件和其它非文本文件。二进制文件只能够在 Binary 模式下访问。

使用顺序文件

你的电脑硬盘上有成百上千的顺序文件。参数文件,错误日志,HTML 文件以及所有类型的无格式文本文件都是顺序文件。这些文件以字母顺序在硬盘上储存。新文本行的开始以两个专门的字符表示,一个叫做 carriage return (回车),另一个叫 line feed(换行)。当你使用顺序文件时,你从文件的开头始,一个字符一个字符的向前移动,一行接一行,直到文件的结尾。顺序文件容易打开和操作,任何文本编辑器都可以。

技巧:什么是顺序文件?

顺序文件就是访问它里面的记录时必须按它占据的顺序进行的文件,这意味着在你想访问第三个记录之前,你必须先访问第一个记录,接着是第二个记录。

技巧:使用 Open 语句打开文件

当你使用顺序访问来打开一个文件时,该文件必须是已经存在的。

读取储存于顺序文件里的数据

我们来用一个已经在你电脑上的顺序文件并且在 Excel VB 编辑器窗口直接使用 VBA 来读取它的内容。要从一个文件读取数据,你就必须先使用 Open 语句打开该文件。这是它的语法:

Open pathname For mode [Access access][lock] As [#]filenumber [Len=reclength]

Open 语句有三个必须的参数,它们是 pathname, mode, 和 filenumber。上面的语法里,这三个参数前面都有用粗体显示的关键字。

①Pathname 是你要打开的文件名称

②Pathname 可以包括驱动器和文件夹名称

③Mode 是个决定文件如何打开的关键字。顺序文件可以以下列模式之一来打开:Input,Output 或 Append。使用 Input 读文件,Output 写文件,将覆盖任何存在的文件,以及 Append 来写入文件,同时附加上任何已经存在的信息。

④Access 是决定决定文件读写的关键字,Access 可以是:Shared(共享),Lock Read(锁定读),Lock Write(锁定写)或 Lock Read Write(锁定读写)。

⑤Lock 决定了哪些文件的操作是允许其它过程进行的。例如,如果某文件是在网络环境下打开的,“锁定”决定了其他人如何访问它。下述锁定关键字是可以用的:Read,Write 或者 ReadWrite。

⑥Filenumber 是从 1 到 511 的数字,该数字用来指向顺序操作中的文件。通过使用 VB 内置函数 FreeFile,你可以获得一个唯一的文件号码。

⑦Open 语句里的最后一个成员 reclength 明确顺序文件里总字符数,或者是随机文件里记录大小。

考虑一下前面的例子,为了读取数据,要打开 C:\\Autoexec.bat 或者其它顺序文件,你应该使用下面的指令:

Open “C:\\Autoexec.bat” For Input As #1

如果某文件已经打开输入了,那么从它读取数据。在打开一格顺序文件后,你就可以使用下面的语句读取它的内容:Line Input #或者 Input # 或者使用 Input 函数。

vba中读写文件的几种方式(vba读取文件的步骤)

逐行读取文件

使用下面的语句来逐行读取 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 StringDim i As Integer ‘ line numberi = 1Open “C:\\Autoexec.bat” For Input As #1’ stay inside the loop until the end of file is reachedDo While Not EOF(1)Line Input #1, rLineMsgBox “Line ” & i & ” in Autoexec.bat reads: ” _& Chr(13) & Chr(13) & rLinei = i + 1LoopMsgBox i & ” lines were read.”Close #1End 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 结束前,还会再运行两条语句,显示读取行的总数,以及关闭该打开的文件。


本文内容由互联网用户自发贡献,该文观点仅代表作者本人。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 203304862@qq.com 举报,一经查实,本站将立刻删除。本文链接:https://xz1898.com/n/247104.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-06-15 18:32
下一篇 2023-06-15 18:59

相关推荐

发表回复

登录后才能评论

联系我们

在线咨询: QQ交谈

邮件:97552693@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息