Excel VBA 编程基础 -- 现代文件处理(四)前文我们讨论了文件夹的拷贝,下面我们来看如何移动文件夹。FSO.MoveFolderFSO.MoveFolder 将一个或多个文件夹从一个地方移动到另一个地方。其一般格式是:FSO.MoveFolder(source, destination)其中,source 指定要移动的源文件夹,在路径的最后部分可以包含通配符。destination 指定移动到的目的地,但不能包含通配符。例1. FSO.MoveFolder 用法示例图1 FSO.MoveFolder 用法示例这个例子将文件夹 D:\VBA_files 移动到 D:\Test 目录下。下面是移动前和移动后的 D:\Test 目录:图2 D:\Test 目录图中上半部分是移动前的 D:\Test,此时该目录中不包含 VBA_files 文件夹。下半部分是移动后的内容,可以看到,此时,VBA_files 已经存在。这一点也可以在图1 右侧的立即窗口中得到证明。注:MoveFolder 似乎比前文讨论过的 CopyFolder 要求的权限多一些。文件夹 D:\VBA_files 可以拷贝到 C:\Test 中,但不能移动到此处,FSO.MoveFolder 报告 70 号错误:Permission denied.(权限被拒绝)例2. 带通配符的移动图3 source 带有通配符不像 FSO.CopyFolder 的 source 和 destination 有着非常复杂的制定规则(请参阅文末相关阅读中的《现代文件处理(三)》),FSO.MoveFolder 的 source 和 destination 的指定规则比较简单:source 不带有通配符:此时将 source 中指定的文件夹移动到目的地。source 带通配符:此时将 source 中的子文件夹以及子文件夹中的所有内容移动到目的地。对于例2 来说,移动的结果就是将 VBA_files 中的子文件夹 data 移动到了 D:\Test\Tmp 目录中。Windows 中有一些特殊的文件夹,为此,FSO 提供了一个 GetSpecialFolder 方法用来获取这些特殊文件夹。FSO.GetSpecialFolder其一般格式是:FSO.GetSpecialFolder(folderspec)其中,folderspec 是表示特殊文件夹的常量。其常量定义如下表所示:表1 特殊文件夹的常量定义例1. FSO.GetSpecialFolder 用法示例图4 FSO.GetSpecialFolder 用法示例从图4 可以看出,GetSpecialFolder 方法的参数 folderspec 可以使用符号常量,也可以使用数值常量。我们知道,WindowsFolder 和 TemporaryFolder 常量所表示的文件夹在环境变量中也有i定义,见下面的例子。例2. 通过环境变量获取特殊文件夹图5 通过环境变量获取特殊文件夹由图可见,WindowsFolder 定义在两个环境变量中:SystemRoot 和 windir。TemporaryFolder 也定义在两个环境变量中:TEMP 和 TMP。由上面的例子也可以看出,SystemFolder 没有定义在环境变量中,要获取这个特殊文件夹,还必须要通过 FSO.GetSpecialFolder 方法。如果在代码中需要用到特殊文件夹,不要将文件夹硬编码在程序中,要通过 FSO.GetSpecialFolder(folderspec) 或 FSO.GetFolder(folderspec) 来获取,这样可以最大限度地提高程序适应不同环境的能力。拷贝和移动文件夹,除了使用 FSO 的相应方法之外,文件夹对象本身也提供了相应的方法。Folder.Copy此方法用来将 Folder 对象所表示的文件夹拷贝到指定位置。其一般格式是:Folder.Copy destination [, overwrite ]其中,desination 表示要拷贝到的目的地。可选 Boolean 类型的参数 overwrite 表示是否覆盖同名对象(文件/文件夹),False 表示不覆盖,True 表示覆盖,True 为默认值。Folder.Move此方法用来将 Folder 对象所表示的文件夹移动到指定位置。其一般格式是:Folder.Move destination其中,destination 表示要移动到的目的地。例1. Folder.Move 用法示例图6 Folder.Move 用法示例这个例子是将文件夹 D:\VBA_files 整体移动到 D:\Test\Tmp 目录中。首先,获取文件夹对象,然后调用文件夹对象的 Move 方法将自己移动到目的地。从右侧的立即窗口的跟踪结果可以看出,移动之前,文件夹对象 fld 的 Path 属性的值是 D:\VBA_files,移动后,fld 对象的 Path 属性值变为了 D:\Test\Tmp\VBA_files。这说明:移动确实发生了,而且 Path 属性随着移动的发生指向了新的位置。Folder.Copy / Folder.Move 的作用与 FSO.CopyFolder / FSO.MoveFolder 基本相同,但 FSO 的相应方法功能更为强大。以上我们用两篇文章讨论了 FSO 中的文件夹操作。可以看出,FSO 提供的文件夹操作工具还是非常充分的。接下来我们将进入 FSO 中最常用的工具集:文件操作。相关阅读Excel VBA 编程基础 -- 现代文件处理(一)Excel VBA 编程基础 -- 现代文件处理(二)Excel VBA 编程基础 -- 现代文件处理(三)