VBA 文件读写

1 写文件

写文件的基本流程:1)以写模式打开文件;2)写内容;3)关闭文件。


步骤1)调用Open打开文件,设置文件号fileNumber

Open语法

Open pathname For mode As [ # ] filenumber 

以写模式(mode)打开文件pathname,同时设置文件号fileNumber。


文件号fileNumber

一个有效文件号,范围为 1 到 511(含 1 和 511)。

可以直接设置数值,或者使用 FreeFile 函数获取下一个可用文件编号。


示例:

以写模式打开指定文件,并设置文件号为#1。

Open "C:\xiaobuteach\test\readme.txt" For Output As #1

Output表示写模式。

如果打开的文件不存在,则会自动创建。

文件号设置为1,前面需加#。


步骤2)调用Print:通过文件号fileNumber写文件内容;

Print语法

Print #filenumber, outputlist

往文件号对应的文件中写入内容outputlist。


示例:

文件中写入两行文字。

 Print #1, "xiaobuteach.com"
 Print #1, "小步教程xiaobuteach.com"

步骤3)调用Close:通过文件号fileNumber关闭文件

Close #filenumber

示例:

Close #1

完整代码如下:

Sub sub7_1()
  Open "C:\xiaobuteach\test\readme.txt" For Output As #1
  Print #1, "xiaobuteach.com"
  Print #1, "小步教程xiaobuteach.com"
  Close #1
End Sub

说明:

如果文件不存在,则会自动创建文件;

如果文件中已经存在,则会重写内容。


通过FreeFile自动分配文件号

Sub sub7_2()

  Dim fileNumber As Integer

  fileNumber = FreeFile '通过FreeFile自动分配文件号
  Debug.Print "fileNumber:" & fileNumber

  Open "C:\xiaobuteach\test\readme10.txt" For Output As #fileNumber
  Print #fileNumber, "xiaobuteach.com"
  Print #fileNumber, "小步教程xiaobuteach.com"
  Close #fileNumber

End Sub

注意事项:

"文件已经打开"的解决方法?

如果运行程序中出现"文件已经打开",但没有发现文本工具打开这个工具,可能是Excel程序中打开。把Excel关闭,重新打开即可。


2 读文件

读文件的基本流程:1)以读模式打开文件;2)读内容;3)关闭文件。


步骤1)调用Open:打开文件,设置文件号fileNumber;

示例:以读模式打开指定文件,并设置文件号为#1。

Open "C:\xiaobuteach\test\readme.txt" For Input As #1

Input表示读模式。

如果打开的文件不存在,则会报错。


步骤2)调用Line Input:每次读取一行

Line Input语法
Line Input #fileNumber, result

从文件号对应的文件中读取1行数据,放到result变量中。

示例

Line Input #1 , result

步骤3)关闭文件。略。

完整代码:

例1:读取两行数据的文本文件。

Sub sub8_2()

  Open "C:\xiaobuteach\test\readme.txt" For Input As #1
  Dim result
  Line Input #1, result
  Debug.Print result

  Line Input #1, result
  Debug.Print result

  Close #1 

End Sub

Line Input执行两行。

输出内容:

xiaobuteach.com
小步教程xiaobuteach.com

例2:通过循环读取多行数据的文本文件。

如果读取到文件末尾,则EOF(文件号)返回True。

Sub sub8_3()
  Open "C:\xiaobuteach\test\readme.txt" For Input As #1
  Dim result 

  Do While Not EOF(1)
    Line Input #1, result
    Debug.Print result
  Loop

  Close #1  

End Sub

输出结果如下:

xiaobuteach.com 1
xiaobuteach.com 2
xiaobuteach.com 3
xiaobuteach.com 4
xiaobuteach.com 5
xiaobuteach.com 6