Excel精英培训网

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

[已解决]获取文件夹列表问题

[复制链接]
发表于 2013-2-26 17:30 来自手机 | 显示全部楼层 |阅读模式
一个文件夹内有好几个文件夹,我想用vba工作表的A列中生成该文件夹内的文件夹列表,请高手帮忙!
最佳答案
2013-2-26 17:43
  1. Option Explicit

  2. Sub ListDirs(ByVal Path As String, Optional iRow As Long = 1)

  3.     Dim filename$
  4.     Dim DirList()
  5.     Dim i&

  6.     ReDim DirList(1 To 1)

  7.     filename = Dir(Path & "*.*", vbDirectory + vbNormal)
  8.     Do While Len(filename)
  9.         '判断是否为.或..
  10.         If Not (filename = "." Or filename = "..") Then
  11.             '判断是否为文件夹
  12.             If (GetAttr(Path & "" & filename) And vbDirectory) = 16 Then
  13.                 '避免读取错误
  14.                 If Err.Number <> 0 Then Err.Clear: GoTo end1if
  15.                 i = i + 1
  16.                 '数据扩容
  17.                 ReDim Preserve DirList(1 To i)
  18.                 '存入子文件夹名
  19.                 DirList(i) = filename
  20.             End If
  21.         End If
  22. end1if:
  23.         '继续查找
  24.         filename = Dir
  25.     Loop
  26.     '判断是否有子文件夹及输出到A列指定行
  27.     If i > 0 Then Range("a" & iRow).Resize(i) = Application.Transpose(DirList)
  28. End Sub

  29. Sub test()
  30.     '调用过程,参数为要查找的文件夹和要输出的行位置
  31.     Call ListDirs("c:", 10)
  32. End Sub
复制代码
发表于 2013-2-26 17:32 | 显示全部楼层
回复

使用道具 举报

发表于 2013-2-26 17:39 | 显示全部楼层
  1. Sub ListDirs(ByVal Path As String)
  2.     Dim filename$
  3.     Dim DirList()
  4.     Dim i&
  5.    
  6.     ReDim DirList(1 To 1)
  7.     i = 0

  8.         filename = Dir(Path & "*.*", vbDirectory + vbNormal)
  9.         Do While Len(filename)

  10.             If Not (filename = "." Or filename = "..") Then
  11.                 If (GetAttr(Path & "" & filename) And vbDirectory) = 16 Then
  12.                     '避免读取错误
  13.                     If Err.Number <> 0 Then Err.Clear: GoTo end1if
  14.                     i = i + 1
  15.                     ReDim Preserve DirList(1 To i)
  16.                     DirList(i) = filename
  17.                 End If
  18.             End If
  19. end1if:            filename = Dir
  20.         Loop
  21.         If i > 0 Then Range("a1").Resize(i) = Application.Transpose(DirList)
  22. End Sub

  23. Sub test()
  24.     Call ListDirs("c:")
  25. End Sub
复制代码
回复

使用道具 举报

发表于 2013-2-26 17:43 | 显示全部楼层    本楼为最佳答案   
  1. Option Explicit

  2. Sub ListDirs(ByVal Path As String, Optional iRow As Long = 1)

  3.     Dim filename$
  4.     Dim DirList()
  5.     Dim i&

  6.     ReDim DirList(1 To 1)

  7.     filename = Dir(Path & "*.*", vbDirectory + vbNormal)
  8.     Do While Len(filename)
  9.         '判断是否为.或..
  10.         If Not (filename = "." Or filename = "..") Then
  11.             '判断是否为文件夹
  12.             If (GetAttr(Path & "" & filename) And vbDirectory) = 16 Then
  13.                 '避免读取错误
  14.                 If Err.Number <> 0 Then Err.Clear: GoTo end1if
  15.                 i = i + 1
  16.                 '数据扩容
  17.                 ReDim Preserve DirList(1 To i)
  18.                 '存入子文件夹名
  19.                 DirList(i) = filename
  20.             End If
  21.         End If
  22. end1if:
  23.         '继续查找
  24.         filename = Dir
  25.     Loop
  26.     '判断是否有子文件夹及输出到A列指定行
  27.     If i > 0 Then Range("a" & iRow).Resize(i) = Application.Transpose(DirList)
  28. End Sub

  29. Sub test()
  30.     '调用过程,参数为要查找的文件夹和要输出的行位置
  31.     Call ListDirs("c:", 10)
  32. End Sub
复制代码
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 00:24 , Processed in 0.294870 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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