(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,如下:

(0)

相关推荐