(1条消息) Excel中VBA编程学习笔记(十八)
Rem 下面的过程遍历指定目录下面的所有文件
Sub SearchFiles(ByVal fd, ByVal fileName1 As String, ByVal fileName2 As String)
Dim fl As File
Dim sfd As Folder
For Each fl In fd.Files '通过循环把文件逐个放在数组内
If InStr(fl.Name, fileName1) > 0 Or InStr(fl.Name, fileName2) > 0 Then '找到满足条件的文件
tmp_count = tmp_count + 1 '计数器(从1开始计数)
tmp_file_arr(tmp_count) = fl.Path & "\" & fl.Name '将文件全路径存储到数组中
fl.Copy “D:\destion\” '拷贝文件到指定的目录
End If
Next fl
If fd.SubFolders.Count = 0 Then Exit Sub 'SubFolders返回由指定文件夹中所有子文件夹(包括隐藏文件夹和系统文件夹)组成的 Folders 集合
For Each sfd In fd.SubFolders '在 Folders 集合进行循环查找
SearchFiles sfd, fileName1, fileName2 '使用递归方法查找下一个文件夹
Next
End Sub
调用格式
【例】搜索C:\test目录下的所有文件名包含“张三”或者“标题一”的文件,并且拷贝到指定的目录D:\destion下。
SearchFiles “C:\test”, “张三”, “标题一”
注:
(1)上面搜索的所有结果存储在数组tmp_file_arr中,文件名包含全路径,如果需要取出文件名可以用
Set fso = CreateObject("Scripting.FileSystemObject")
sname = fso.getfilename(tmp_file_arr(1)) '获取第一个文件的文件名
(2)上面使用了Folder数据类型,因此需要在引用中添加Microsoft Scripting Runtime,如下: