代码使用方法:将如下代码放到当前目录的一个工作薄的按钮控件中。
请注意哦,代码只能在EXCEL2007或以上版本才能使用,EXCEL2003无法使用。
首先,申明一个公有变量:
Public abc As Integer
接着,功能代码如下:
Function ListAllFso(myPath As String) '用FSO方法遍历并列出所有文件和文件夹名的【递归过程】
Dim fld As Object
Dim f As Object
Dim fd As Object
Dim k
Set fld = CreateObject("Scripting.FileSystemObject").GetFolder(myPath)
'用FSO方法得到当前路径的文件夹对象实例 注意这里的【当前路径myPath是个递归变量】
For Each f In fld.Files '遍历当前文件夹内所有【文件.Files】
'MsgBox f '在A列逐个列出文件名
If (InStr(f, "附件14") > 0) Then 'f 代表文件路径及文件名称,f.name代表文件路径(包括\),f代表文件名称(包括拓展名)
abc = abc + 1
Sheets("Sheet1").Cells(abc, 1).Value = f
FileCopy f, "f:\123\" & Int(Rnd * 50000) & f.Name
End If
Next
For Each fd In fld.SubFolders '遍历当前文件夹内所有【子文件夹.SubFolders】
'MsgBox " " & fd.Name & "" 'fd.Name为子文件夹的名称
Call ListAllFso(fd.Path) '注意此时的路径变量已经改变为【子文件夹的路径fd.Path】
'注意重点在这里: 继续向下调用递归过程【遍历子文件夹内所有文件文件夹对象】
Next
End Function
最后,调用方法:
Call ListAllFso(ThisWorkbook.Path)