|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
- Public Sub GetFlieList()
- On Error Resume Next
- Dim fd As FileDialog
- Set fd = Application.FileDialog(msoFileDialogFolderPicker)
- If fd.Show = -1 Then GetDirectory = fd.SelectedItems(1)
- If IsEmpty(GetDirectory) Then Exit Sub '如果按取消键,退出
- Dim 父亲() '存放所有文件夹名称及其路径
- Dim 目录, i, k, 文件, x, q, t: t = Timer '定义变量
- Dim arr1() '存放查找到的所有文件
- Range("a2:h" & Range("a" & Cells.Rows.Count).End(xlUp).Row).ClearContents
- ReDim 父亲(1 To 1)
- ' 父亲(1) = ThisWorkbook.Path & "" '初始化arr,先赋一个值,若需要指定,可用"e:"
- 父亲(1) = GetDirectory & "" '初始化arr,先赋一个值,若需要指定,可用"e:"
- ' Cells(1, 1) = 父亲(1) '在A列输出目录
- i = 1: k = 1 '初始化i和k的值
- Do While i <= k '循环条件是i小于等于文件夹的个数
- 目录 = Dir(父亲(i), vbDirectory) '设置搜索位置为数组装入的每一个目录
- Do
- If InStr(目录, ".") = 0 And 目录 <> "" Then '此用法的缺点是,目录名如果含有"."时,就没有办法显示;默认含"."都是文件
- k = k + 1 '当搜索到目录时,目录数自增1
- ReDim Preserve 父亲(1 To k)
- 父亲(k) = 父亲(i) & 目录 & "" '将原目录加上新找到的目录合并,作为下一次搜索的位置
- ' Cells(k, 1) = 父亲(k)
- End If
- 目录 = Dir
- Loop Until 目录 = "" '当本层搜索完后,跳出循环,进行下一次搜索
- i = i + 1
- Loop
- '*******下面是提取各个文件夹的文件***
- Set fso = CreateObject("Scripting.FileSystemObject")
- For x = 1 To UBound(父亲)
- 'If 父亲(x) = "" Then Exit For
- 文件 = Dir(父亲(x) & "*.*") '设置搜索条件为所有文件
- Do While 文件 <> ""
- q = q + 1
- ReDim Preserve arr1(1 To 6, 1 To q) '动态扩充数组
- arr1(6, q) = Left(文件, InStrRev(文件, ".") - 1) '文件名
- arr1(5, q) = Left(父亲(x), Len(父亲(x)) - 1) '上级目录
- Set myFile = fso.GetFile(父亲(x) & 文件)
- arr1(1, q) = 文件 '文件名,有后缀
- arr1(2, q) = myFile.DateCreated '创建日期
- arr1(3, q) = myFile.DateLastModified '修改日期
- arr1(4, q) = myFile.Size & "KB" '文件大小
- 'arr1(5, q) = myFile.DateLastAccessed '访问日期
- 文件 = Dir
- Loop
- Next x
- ' Stop
- [a1] = "文件名": [b1] = "文件大小": [c1] = "创建日期": [d1] = "修改日期": [e1] = "所在目录": [f1] = "文件名"
- Range("a2").Resize(q, 6) = Application.Transpose(arr1) '将文件输出
- '添加超链接
- For i = 1 To q
- ActiveSheet.Hyperlinks.Add Anchor:=Cells(i + 1, 1), Address:=Cells(i + 1, 6)
- 'ActiveSheet.Hyperlinks.Add Anchor:=Cells(i + 1, 7), Address:=Cells(i + 1, 7)
- Next
- Debug.Print Timer - t & "秒"
- End Sub
复制代码
|
|