网上搜的一段代码加上自己的理解
------------------------------------------------------------------------------------------------------------------------
'-------------------------------函数--------------------------------------------------------
Function get_folder_file(pth)
Set fso = CreateObject("Scripting.FileSystemObject").GetFolder(pth)
’遍历单文件
For Each 单文件 In fso.Files
s_1 = fso.Path
s_2 = 单文件.Name
s_3=fso.Path & "\" & 单文件.Name
if s_2 like "*xls*"then
set wb = workbooks.open(单文件.fullName)
wb.Close Savechanges:=False
'wb.Close Savechanges:=true
end if
DoEvents '转让控制权
Next
'遍历文件夹
For Each Folder In fso.SubFolders
Call get_folder_file(Folder.Path)
Next
Set fso = Nothing
End Function
'-------------------------------------------------------------------------------------------
'------------------------------子过程------------------------------------------------------
Sub test_1()
dim pth$
pth = "Z:\11111"
'pth = thisworkbook.path
Call get_folder_file(pth)
End Sub
Sub test_2()
dim pth$
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "选择文件夹"
If .Show Then
pth = .SelectedItems(1)
End If
End With
If IsEmpty(pth) Then Exit Sub '如果按取消键,退出
Call get_folder_file(pth)
End Sub
总结:函数是不能直接执行的。
fso 子对象有文件夹集合和文件集合,分别为fso.SubFolders和fso.Files
函数get_folder_file(pth )需要一个pth也就是文件夹的路径为参数,第一次循环fso是最外围的文件夹路径,第二次循环是把主文件夹的子文件夹路径赋值给fso,再获取其子文件和子文件夹,依次往内层文件夹读取路径。
如果想快速一个文件夹的路径,可以创建其桌面快捷键,右击,属性,就可以复制了。