前面我们说到了文件的读取,读取的文件是我们手动创建的txt文本文档,VBA也是可以对文件进行写操作的。
1、文件的写入:
在VBA里,我们要对文件进行二进制的写操作,使用的是:
代码语言:javascript复制Open pathname For mode [ Access access ] [ lock ] As [ # ] filenumber [ Len = reclength ]
Put[ # ] filenumber、[ recnumber ]、 varname
Close [ filenumberlist ]
打开Open-写入Put-关闭Close,仍然是标准的3个步骤。
2、文件写入代码
我们来尝试用VBA代码对文件进行写操作:
代码语言:javascript复制Sub WriteTxtByOpenBin()
Dim num_file As Integer
Dim str As String
str = "测试文件写入"
Dim b() As Byte
'将string转换为byte数组
b = str
'获取1个文件号
num_file = VBA.FreeFile
Open ThisWorkbook.Path & "put.txt" For Binary Access Write As #num_file
'写入数据
Put #num_file, 1, b
'关闭文件
Close #num_file
End Sub
没出什么问题的话,在程序文件的目录下,会生成1个put.txt文件,我们双击打开的话,你应该会发现乱码了:
为什么和我们写入的str = "测试文件写入"不一样呢?
其实这还是编码原因造成的,记得我们文件读取里提到的那个StrConv吧,我们进行转换一下:
代码语言:javascript复制Sub WriteTxtByOpenBin()
Dim num_file As Integer
Dim str As String
str = "测试文件写入"
Dim b() As Byte
'将string转换为byte数组
b = VBA.StrConv(str, vbFromUnicode)
'获取1个文件号
num_file = VBA.FreeFile
Open ThisWorkbook.Path & "put.txt" For Binary Access Write As #num_file
'写入数据
Put #num_file, , b
'关闭文件
Close #num_file
End Sub
这时候打开就正常了。
上面我们说的是mode为Binary的方法,VBA里还提供了Output ,这时候可以直接使用Write来写入String等各种数据类型的数据,VBA还会帮忙处理好各种数据类型的写入方式,比如String类型会加上双引号,日期会加上#等等。甚至会帮忙将Unicode编码转换为ANSI编码,这些都会帮我们处理好。
这也是前面在数组Array提到过的:过度的封装(而且我们看不到源码),让我们这些使用者对底层的一些知识一无所知。
虽然这个很好用,但希望使用者一定要先去理解如何按照mode为Binary的方法去读取、写入文件,在要处理的地方都自己手动去处理好,真正能够理解了原理后,图方便再去使用mode为Input、Output等。