Excel VBA操作文件大全

下面这个函数可以将文本文件的数据一次读入到一个字符串(但是若包含中文时会出错,因为一个中文字占2个字节)。

Public Function ReadText(FileName As String) Dim fnum%, isopen As Boolean On Error GoTo erro fnum = FreeFile()

Open FileName For Input As #fnum isopen = True

ReadText = Input(LOF(fnum), fnum) erro:

If isopen Then Close #fnum

If err Then Debug.Print err.Number, err.Description End Function 12、Print # 语句

语法:Print #filenumber, [outputlist] outputlist 参数的设置如下:

[{Spc(n) | Tab[(n)]}] [expression] [charpos]

Spc(n) 用来在输出数据中插入空白字符,而 n 指的是要插入的空白字符数。

Tab(n) 用来将插入点定位在某一绝对列号上,这里,n 是列号。使用无参数的 Tab 将插入点定位在下一个打印区的起始位置。

expression 要打印的数值表达式或字符串表达式。 charpos 指定下一个字符的插入点。使用分号将插入点定位在上一个显示字符之后。用 Tab(n) 将插入点定位在某一绝对的列号上,用无参数的 Tab 将插入点定位在下一个打印区的起始处。如果省略 charpos,则在下一行打印下一个字符。

功能:将格式化显示的数据写入顺序文件中。

说明:通常用 Line Input # 或 Input 读出 Print # 在文件中写入的数据。 示例:

Open \' 打开输出文件。 Print #1, \' 将文本数据写入文件。 Print #1, ' 将空白行写入文件。

Print #1, \' 数据写入两个区(print zones)。 Print #1, \' 以空格隔开两个字符串。

Print #1, Spc(5); \' 在字符串之前写入五个空格。 Print #1, Tab(10); \' 将数据写在第十列。 ' 赋值 Boolean、Date、Null 及 Error 等。 Dim MyBool, MyDate, MyNull, MyError

MyBool = False: MyDate = #2/12/1969#: MyNull = Null MyError = CVErr(32767)

' True、False、Null 及 Error 会根据系统的地区设置自动转换格式。 ' 日期将以标准的短式日期的格式显示。 Print #1, MyBool; \Print #1, MyDate; \

Print #1, MyNull; \

Print #1, MyError; \Close #1

以上代码写入的内容如下: This is a test

Zone 1 Zone 2 Hello World

5 leading spaces Hello

False is a Boolean value 1969-2-12 is a date Null is a null value

Error 32767 is an error value 13、Width # 语句

语法:Width #filenumber, width

width 必要。范围在 0–255 之间的数值表达式,在新的一行开始之前,指出在该行上可出现多少字符。如果 width 等于 0,则行的长度不受限制。width 的缺省值为 0。 功能:将一个输出行的宽度指定给用 Open 语句打开的文件。 示例: Dim I

Open \

Width #1, 5 ' 设置输出行宽为 5。 For I = 0 To 9 ' 循环 10 次。

Print #1, Chr(48 + I); ' 每行输出五个字符。 Next I Close #1

以上代码写入的内容如下: 01234 56789

(四)处理二进制文件

打开二进制文件可以使用Open语句的Random和Binary方式打开。二进制文件读写使用Get和Put语句。 1、Put 语句

语法:Put [#]filenumber, [recnumber], varname

recnumber 可选。Variant (Long)。记录号(Random 方式的文件)或字节数(Binary 方式的文件),指明在此处开始写入。

说明:通常用 Get 将 Put 写入的文件数据读出来。 示例:

Dim num As Long, text As String num = 12345 text = \

Open \'打开或创建一个二进制文件 Put #1, , num '写入4个字节

Put #1, , text '写入8个字节(字符串长为8) Close #1

2、Get 语句

语法:Get [#]filenumber, [recnumber], varname

recnumber 可选。Variant (Long)。记录号(Random 方式的文件)或字节数(Binary 方式的文件),以表示在此处开始读出数据。

功能:将一个已打开的磁盘文件读入一个变量之中。 说明:通常用 Put 将 Get 读出的数据写入一个文件。 示例:读取以上代码写入的内容 Dim num As Long, text As String Open \Get #1, , num

text = Space$(8) '准备8个字节的字符串 Get #1, , text '读入 Debug.Print num, text Close #1

在立即窗口可以看到如下内容: 12345 a string

3、Seek 语句

语法:Seek [#]filenumber, position

其中position 为介于 1~ 2,147,483,647(相当于 2^31 – 1)之间的数字,指出下一个读写操作将要发生的位置。

功能:在 Open 语句打开的文件中,设置下一个读/写操作的位置。

说明:可以用Seek语句指定Get语句的读取位置,但在 Get 及 Put 语句中指定的记录号将覆盖由 Seek 语句指定的文件位置。 示例:

Dim MaxSize, NextChar, MyChar Open \

MaxSize = LOF(1) ' 取得文件的总字符数。

' 用循环读入所有记录,但是从最后的记录开始往前读。 For NextChar = MaxSize To 1 Step -1 Seek #1, NextChar ' 设置读写位置。 MyChar = Input(1, #1) ' 读入一字符。 Next NextChar Close #1 4、Seek 函数

语法:Seek(filenumber)

功能:返回一个 Long,在 Open 语句打开的文件中指定当前的读/写位置。

说明:在使用Get语句读取文件时,必须用LOF函数来判断是否到达文件末尾,而不是用EOF函数。可以使用Seek函数判断当前位置,然后与LOF的值比较。 示例:

Do While Seek(1) < LOF(1) '继续读取 ......

Loop

(五)总结

VBA语句的文件操作涵盖了文件操作的绝大部分内容,很多函数的使用也很简单,一般的文件读写也非常方便,特别是对文本文件。但对于复杂的文件读写,代码的结构和维护性都不好。因此在VB6之后,微软引入了FileSystemObject对象模型,提供了面向对象的类库,来操作驱动器、文件夹和文件。但对于二进制文件的操作,目前还只能用VBA语句。 Excel文件本身就是二进制文件,它使用的文件格式叫做BIFF(Binary Interchange File Format),即二进制可交换文件格式(但2007开始使用OOXML格式)。关于其内部的结构,本人也在研究中。以二进制结构打开Excel文件,不但可以读取其表格中的数据,还可以读取其所有的信息(包括密码)。注意,以Open语句打开文件,并不是我们通常的双击一个文件打开显示到屏幕上,而是将其存放在磁盘上的数据读入到缓冲区,不是可视化的打开。这种打开是不需要密码的,即使你的Excel文件设置了打开密码,还是照打开不误,这也正是Excel文件不安全的根源所在。我以前发过一篇关于破解的文章,里面破解VBA工程密码的方法就是用二进制替换。由于论坛不让讨论破解的话题,这里就不再详细分析代码了,感兴趣的请自行研究。当然,Excel的其他密码也是可类似破解的,前提是你必须十分了解Excel的内部结构,知道密码放在哪里,才能替换。知道的解密的方法,自然可以针对性的改进加密的方法。

Excel-VBA操作文件四大方法之三__利用FileSystemObject对象来处理文件

FileSystemObject对象模型,是微软提供的专门用来访问计算机文件系统的,具有大量的属性、方法和事件。其使用面向对象的―object.method‖语法来处理文件夹和文件,使用起来十分方便(需Office 2000以后版本)。FileSystemObject并不是VBA的一部分,它是以一个COM组件的形式提供的。因此,要使用先要创建FileSystemObject对象。 FileSystemObject对象模型包含了下面的对象和集合: ·FileSystemObject 主对象,包含用来创建、删除和获得有关信息,以及用来操作驱动器、文件夹和文件的方法和属性。 ·Drive 对象,包含用来获得信息的方法和属性,这些信息是关于连接在系统上的驱动器的,如有多少可用空间等。驱动器不一定是硬盘,也可以是CD-ROM、U盘甚至是通过网络在逻辑上连接的硬盘(如公司里部门共享的服务器网络硬盘)。 ·Drives 集合,提供驱动器的列表,这些驱动器以实物或在逻辑上与系统相连接。Drives集合包括所有驱动器,与类型无关。 ·File 对象,包含用来创建、删除或移动文件的方法和属性。 ·Files 集合,提供包含在文件夹内的所有文件的列表。 ·Folder 对象,包含用来创建、删除或移动文件夹的方法和属性。 ·Folders 集合,提供包含在文件夹内的所有文件夹的列表。 ·TextStream 对象,用来读写文本文件。

(一)准备工作

要使用FileSystemObject对象,先要创建它。创建FileSystemObject对象要使用CreatObject函数。CreateObject 函数用来创建并返回一个对 ActiveX 对象的引用。 语法:CreateObject(class,[servername])

联系客服:779662525#qq.com(#替换为@)