按条件遍历指定目录下的文件名

本帖最后由 暗夜男 于 2016-11-23 07:38 编辑 

1.如果D1为空,那么按E1读取路径并遍历文件名,如果D1是01-12之间任意文本,那么按当年+D1文本组合,例如D1是03,那么组合后就是'2016年03月',然后按这个文本读取路径遍历文件名
2.比如论坛附件解压到'C:\123\456\'目录下,那么按照E1遍历的目录就是'C:\123\456\2016年11月指定目录',结果就是把'好_7.xls'和'好_8.xls'从C2开始依次输出
3.比如论坛附件解压到'C:\123\456\'目录下,D1文本是12,那么按照D1遍历的目录就是'C:\123\456\2016年12月指定目录',结果就是把'好_10.xls'和'好_12.xls'从C2开始依次输出
4.C列输出顺序为升序
5.目录有其他文件夹和文件,只读取'好_'开头的
6.目录里文件数量100左右,未来会更多,不知道VBA有没有限制

2016-11-22 13:52
  1. Sub tt()

  2. Dim mth As String, namepath As String, ebk As String

  3. Dim arr(1 To 1000, 1 To 1), i As Integer '先定义一个很大的数值arr,若还不够大,可以再放大些

  4. With Sheet1

  5. '#######当d1空的时候取值位e1单元格的值,反正则区d1单元格值(可以是文本月数如01,也可以是数值1),对于你输的要求不是太明白

  6. '其实你可以改下面2行代码,就能满足你要求,还是自己改会更明白些!

  7. mth = IIf(.[d1] = '', [e1].Value, Year(Date)& Format(.[d1], '年00月'))& '指定目录' '文件夹名称

  8. namepath = ThisWorkbook.Path& ''& mth& ''                           '文件路径

  9. '#######################################################以上自己改成你要的方法吧

  10. ebk = Dir(namepath& '好_*.xls*') '用dir遍历文件夹内是否还有好_开头的xls后缀的excel文件

  11. Do While ebk< > ''           '当ebk不为空时,即找到了文件,则讲文件名给数值,否则退出do,loop循环

  12. i = i + 1

  13. arr(i, 1) = ebk

  14. ebk = Dir

  15. Loop

  16. .Range('c2:c1000').ClearContents  '清除数据

  17. .Range('c2').Resize(1000) = arr   '将数据写入

  18. End With

(0)

相关推荐