Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 1966|回复: 2

[已解决]新手求助 工作簿提取名字

[复制链接]
发表于 2013-8-30 17:09 | 显示全部楼层 |阅读模式
我根据校长的遍历文件夹 可是不能把某些文件夹的工作簿名称提取出来  麻烦更我解决哈
最佳答案
2013-8-30 19:27
  1. Sub 提取文件信息()
  2.   Dim arr(1 To 10000) As String
  3.   Dim f, i, k, f2, f3, x
  4.   Dim brr(1 To 100000, 1 To 6) As String, q As Integer
  5.   Dim fso As Object, myfile As Object
  6.   arr(1) = ThisWorkbook.Path & ""
  7.   i = 1: k = 1
  8.   Do While i < UBound(arr)
  9.     If arr(i) = "" Then Exit Do
  10.     f = Dir(arr(i), vbDirectory)
  11.     Do
  12.       If Not (f Like "*.xl*") And f <> "" And InStr(f, ".") <> 1 Then '原来你的错误就在由于文件夹是由*.*表示的,这跟工作表的后缀名中的.冲突了。
  13.         k = k + 1
  14.         arr(k) = arr(i) & f & ""
  15.       End If
  16.       f = Dir
  17.     Loop Until f = ""
  18.     i = i + 1
  19.   Loop
  20.   '*******下面是提取各个文件夹的文件***
  21.   Set fso = CreateObject("Scripting.FileSystemObject")
  22.   For x = 1 To UBound(arr)
  23.       If arr(x) = "" Then Exit For
  24.        f3 = Dir(arr(x) & "*.xls*")
  25.      Do While f3 <> ""
  26.        q = q + 1
  27.        brr(q, 6) = arr(x) & f3
  28.        Set myfile = fso.GetFile(brr(q, 6))
  29.        brr(q, 1) = f3
  30.        brr(q, 2) = myfile.Size
  31.        brr(q, 3) = myfile.DateCreated
  32.        brr(q, 4) = myfile.DateLastModified
  33.        brr(q, 5) = myfile.DateLastAccessed
  34.        f3 = Dir
  35.      Loop
  36.   Next x
  37.   Range("a2").Resize(1000, 6) = ""
  38.   Range("a2").Resize(q, 6) = brr
  39. End Sub
复制代码

13.rar

66.55 KB, 下载次数: 13

发表于 2013-8-30 18:32 | 显示全部楼层
  1. Dim objList As Collection

  2. Sub main()
  3.     Dim strPath As String
  4.     Dim arr
  5.     Dim i As Long
  6.     Set objList = New Collection
  7.     With Application.FileDialog(msoFileDialogFolderPicker)
  8.         .AllowMultiSelect = False
  9.         .InitialFileName = ThisWorkbook.Path
  10.         If .Show = -1 Then
  11.             strPath = .SelectedItems(1)
  12.         Else
  13.             MsgBox "请先选择要遍布的文件夹"
  14.             Exit Sub
  15.         End If
  16.     End With
  17.     Call fso(strPath & Application.PathSeparator)
  18.     If objList.Count Then
  19.         ReDim arr(1 To objList.Count, 1 To 1)
  20.         For i = 1 To objList.Count
  21.             arr(i, 1) = objList(i)
  22.         Next
  23.         Range("a1").Resize(i - 1).Value = arr
  24.         MsgBox "一共查到 " & i - 1 & " 个工作簿"
  25.     End If
  26.     Set objList = Nothing
  27. End Sub

  28. Sub fso(ByVal sPath As String)
  29.     Dim fs As Object
  30.     Dim fd As Object
  31.     Dim fc As Object
  32.     Dim s, d
  33.     Set fs = CreateObject("scripting.filesystemobject")
  34.     Set fd = fs.getfolder(sPath)
  35.     Set fc = fd.Files
  36.     For Each s In fc
  37.         If UCase(s.Path) Like "*.XL*" Then
  38.             objList.Add s.Path
  39.         End If
  40.     Next
  41.     For Each d In fd.SubFolders
  42.         fso d.Path
  43.     Next
  44. End Sub
复制代码
回复

使用道具 举报

发表于 2013-8-30 19:27 | 显示全部楼层    本楼为最佳答案   
  1. Sub 提取文件信息()
  2.   Dim arr(1 To 10000) As String
  3.   Dim f, i, k, f2, f3, x
  4.   Dim brr(1 To 100000, 1 To 6) As String, q As Integer
  5.   Dim fso As Object, myfile As Object
  6.   arr(1) = ThisWorkbook.Path & ""
  7.   i = 1: k = 1
  8.   Do While i < UBound(arr)
  9.     If arr(i) = "" Then Exit Do
  10.     f = Dir(arr(i), vbDirectory)
  11.     Do
  12.       If Not (f Like "*.xl*") And f <> "" And InStr(f, ".") <> 1 Then '原来你的错误就在由于文件夹是由*.*表示的,这跟工作表的后缀名中的.冲突了。
  13.         k = k + 1
  14.         arr(k) = arr(i) & f & ""
  15.       End If
  16.       f = Dir
  17.     Loop Until f = ""
  18.     i = i + 1
  19.   Loop
  20.   '*******下面是提取各个文件夹的文件***
  21.   Set fso = CreateObject("Scripting.FileSystemObject")
  22.   For x = 1 To UBound(arr)
  23.       If arr(x) = "" Then Exit For
  24.        f3 = Dir(arr(x) & "*.xls*")
  25.      Do While f3 <> ""
  26.        q = q + 1
  27.        brr(q, 6) = arr(x) & f3
  28.        Set myfile = fso.GetFile(brr(q, 6))
  29.        brr(q, 1) = f3
  30.        brr(q, 2) = myfile.Size
  31.        brr(q, 3) = myfile.DateCreated
  32.        brr(q, 4) = myfile.DateLastModified
  33.        brr(q, 5) = myfile.DateLastAccessed
  34.        f3 = Dir
  35.      Loop
  36.   Next x
  37.   Range("a2").Resize(1000, 6) = ""
  38.   Range("a2").Resize(q, 6) = brr
  39. End Sub
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-19 21:23 , Processed in 0.355215 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表