Excel VBA 编程基础 -- 文件处理(三)
- 2026-11-10 00:32:06
Excel VBA 编程基础 -- 文件处理(三)今天我们仍然在下表的框架内讨论 VBA 中的文件处理: 
表1 VBA 早期的文件处理工具 上文我们讨论了枚举文件 Dir 和 删除文件 Kill。今天我们来看如何获取 / 设置文件属性。 GetAttr GetAttr 返回一个代表文件或目录属性的整数。其一般格式是: GetAttr(pathname) 其中,pathname 是字符串表达式,指定要获取属性的目标(文件或目录)。pathname 可以包含驱动器和目录。 GetAttr 的返回值列表如下: 
表2 GetAttr 返回值列表 由于文件或目录可能具有一个或多个属性,因此 GetAttr 返回值有可能是上述常量值的组合,譬如,一个文件可能是只读,另一个文件可能是只读且隐含,等等。 因此,需要对 GetAttr 的返回值进行 And 操作,以分离出目标的各个属性。 例1. GetAttr 用法示例 
图1 GetAttr 用法示例 从这个例子可以看出,驱动器 C 根目录下有一些文件和目录是系统且隐含的,其中有几个文件更是 GetAttr 所不能访问的。 下图是 GetAdditionalAttrs 函数的代码: 
图2 GetAdditionalAttrs 函数代码 从以上两图,可以看出如何解析 GetAttr 的返回值。 SetAttr SetAttr 用来设置目标的属性。其一般格式是: SetAttr pathname, attributes 其中,pathname 是字符串表达式,是要设置属性的目标(文件或目录)。attributes 是整数表达式,表示属性组合。 attributes 的取值与表2 相同。 例1. SetAttr 用法示例 
图3 SetAttr 用法示例 由图可见,D:\VBA_file 目录原来具有 vbNormal 属性,经过 SetAttr 操作后,就具有了 vbReadOnly 属性。 FileLen FileLen 返回文件长度。其一般格式是: FileLen(pathname) 其中,pathname 是字符串表达式,指定要返回长度的文件名。FileLen 返回 Long 型整数,表示文件长度。 例1. FileLen 用法示例 
图4 FileLen 用法示例 这个例子,我们通过 FileLen 获知了驱动器 C 上的分页文件 pagefile.sys 的长度。因为 VBA 中没有无符号整数类型,因此对于比较大的数会显示为负数。对于最后折算为 MB 的计算中,我们使用了 Abs 函数取绝对值,得到分页文件的大小是 2048MB。这和电脑上显示的信息是一致的。 FileDateTime FileDateTime 返回目标被创建的时间或最近被修改的时间。其一般格式是: FileDateTime(pathname) 其中,pathname 是字符串表达式,指定要获取时间的目标(文件或目录)。 注:这里的“时间”表示广义时间,指日期(Date)和时间(Time)。 例1. FileDateTime 用法示例 
图5 FileDateTime 用法示例 在上面的代码中,如果将 dt 声明为 DateTime 类型,就会出错。声明为 Double 和 Variant 都可以,但 Double 类型需要经过 CDate 的类型转换才能显示日期时间。 其实,VBA 的 DateTime 类型其内部表示就是 Double。FileDateTime 的返回值不能赋给 DateTime 类型的变量,但赋给 Double 类型的变量就可以。这真是匪夷所思!这算是 VBA 的怪癖之一吧。 Name Name 用来重命名文件或目录。其一般格式是: Name oldpathname As newpathname 其中,oldpathname 是字符串表达式,指定要重命名的文件或目录。newpathname 是字符串表达式,指定文件或目录的新名字。 注意: 注:文件的重命名竟然可以实现文件的移动,这也可以算作 VBA 的怪癖行为了。Windows 有一个重命名命令 Rename: 
图6 Windows Rename 命令 由图6 可见,Windows Rename 不允许为新名字指定新的位置,也就是说,Windows Rename 命令严格遵守了 Rename 的本义:只是更改文件名字。 VBA 的 Name 语句有两点怪癖: 例1. Name 用法示例 
图7 Name 用法示例 在这个例子中,我们首先把驱动器 D 上面的目录 VBA_file 改名为 VBA_files,然后把该目录下的文件 file1.txt 移动到驱动器 C 下面,重命名为 VBA_file_file1.txt。 FileCopy FileCopy 用来拷贝文件。其一般格式是: FileCopy source, destination 其中,source 是字符串表达式,指定要被拷贝的文件名。destination 是字符串表达式,指定文件的新位置和名字。 例1. FileCopy 用法示例 
图7 FileCopy 用法示例 通过这个例子,我们把上个例子中移动到驱动器 C 的文件又拷贝了回来。 通过上篇和这篇文章,我们把 VBA 中早期对文件作为一个整体进行操作的工具差不多讨论完了。从下一篇开始我们深入到文件内部,讨论对文件内容的读写。 相关阅读 Excel VBA 编程基础 -- 文件处理(一) Excel VBA 编程基础 -- 文件处理(二)







如果指定的新名字已存在,则会引发错误。 oldpathname 和 newpathname 不能含有通配符(* 或 ?)。 newpathname 所指定的新文件名可以和 oldpathname 所表示的旧文件名不在同一位置,即 Name 可以实现文件的移动功能。

Name 这个名字本身与其任务之一——重命名——不匹配,Rename 才能精确反映工作的目的。 Name 在自身任务——重命名——之外,又叠加了 FileMove 的语义,这使得 Name 语句更加混乱。


本文来自网友投稿或网络内容,如有侵犯您的权益请联系我们删除,联系邮箱:wyl860211@qq.com 。