乐于分享
好东西不私藏

Excel VBA 编程基础 -- 现代文件处理(二)

Excel VBA 编程基础 -- 现代文件处理(二)
前文我们讨论了关于驱动器的操作,今天我们来看看文件夹。
FSO.GetFolder 方法
FSO.GetFolder 方法用来从指定的路径中获得文件夹对象 Folder。其一般格式是:
FSO.GetFolder(path)
其中,path 是指定的路径,该路径可以是绝对路径,也可以是相对路径。如果 path 指定的路径不存在,将引发错误。
Folder 对象
Folder 对象提供了操作文件夹的所有工具。
Folder 对象的属性列表如下:
表1 Folder 对象属性列表
由表可见,只要我们获得了一个文件夹的 Folder 对象,就可以获取或设置文件夹的一些特性(Attributes。参照一般译法,property 译为“属性”,attribute 译为“特性”)。譬如,可以更改文件夹的名字,可以设置文件夹为只读,或设置其为系统文件夹,等等。
文件夹对象的 Size 属性返回该文件夹内以及子文件夹内所有文件大小的总和,以字节为单位。
例1. Folder 对象用法示例
图1 Folder 对象用法示例
首先,通过 FSO.GetFolder 方法获得 Folder 对象,然后枚举其目录结构。为了简单,例中假设 D:\VBA_files 文件夹只具有二级结构。如果目录层级未知,则需要使用递归枚举才能完整地枚举出所有的目录结构。
接下来是反向枚举。从最底层的文件夹开始,依次通过 ParentFolder 属性获取当前文件夹的父文件夹,如此逐级向上,直到根目录的 ParentFolder 属性值为 Nothing 为止。
FSO.CreateFolder 方法
FSO.CreateFolder 用来新建一个文件夹。其一般格式是:
FSO.CreateFolder(foldername)
其中,foldername 是要创建的文件夹名。如果 foldername 已经存在,将引发错误。如果创建成功,则返回新创建的文件夹的 Folder 对象。
FSO.DeleteFolder 方法
FSO.DeleteFolder 用来删除文件夹及其内容。其一般格式是:
FSO.DeleteFolder folderspec [, force ]
其中,folderspec 指定要删除的文件夹。folderspec 中可以包含通配符(wildcards),关于通配符,请参阅文末相关阅读中的《文件处理(二)》,此不赘述。可选参数 force 是 Boolean 类型,True 表示对于设有只读标记的文件夹也一并删除,False 表示不删除设有只读标记的文件夹。如果指定的文件夹不存在,则 FSO.DeleteFolder 引发错误,然后返回,已删除的不再恢复。
FSO.DeleteFolder 方法不关心要删除的文件夹中是否有内容(文件或子文件夹),都一并删除。所以,在调用此方法删除文件夹时,一定要确保文件夹内没有需要保留的内容。
例2. CreateFolder & DeleteFolder 用法示例
图2 CreateFolder & DeleteFolder 用法示例
首先,使用 FSO.CreateFolder 新建一个文件夹。然后从该文件夹开始,逐级向上回溯,自底向上枚举出整个目录结构。接着,使用 FSO.DeleteFolder 删除刚刚建立的文件夹。最后,使用 FSO.GetFolder 来获取该文件夹,因为该文件夹已删除,因此引发错误。
Folder 对象自己也有一个 Delete 方法,可以调用此方法来让 Folder 删除自身。其一般格式是:
Folder.Delete [ force ]
其中,可选参数 force 与 FSO.DeleteFolder 方法中的 force 参数一样。
使用 Folder.Delete 方法可以将例2 重写如下。
例3. 使用 Folder.Delete 重写例2
图3 使用 Folder.Delete 重写例2
由图可见,在 fld.Delete 方式执行之后,fld 对象仍在(fld Is Nothing 返回 False)。但在下面的监视窗口中可以看到,fld 对象的所有属性都已经不能访问。因为 fld 对象赖以存在的基础已经被删除了。
相关阅读
Excel VBA 编程基础 -- 现代文件处理(一)
Excel VBA 编程基础 -- 文件处理(二)