Excel精英培训网

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

[已解决]学习FSO遍历子文件夹

[复制链接]
发表于 2013-8-5 09:54 | 显示全部楼层 |阅读模式
Dim FSO As Object, i, arr(1 To 10 ^ 6)
Sub test1()
    Cells.Clear
    Set FSO = CreateObject("scripting.filesystemobject")
    test2 "f:\Downloads\"
    If i Then [a1].Resize(i) = arr
End Sub


Sub test2(MyPath)
    Dim Folder As Object
    Dim SubFolder As Object
    Dim FileCollection As Object
    Dim FileName As Object
    Set Folder = FSO.getfolder(MyPath)
    Set FileCollection = Folder.Files
   
    For Each FileName In FileCollection
        i = i + 1
        arr(i) = MyPath & FileName
    Next
   
    For Each SubFolder In Folder.SubFolders
        test2 SubFolder
    Next
End Sub


学习烟花的:http://www.excelpx.com/thread-295765-1-1.html
不知我哪儿弄错了,没有返回文件夹或子文件夹下的文件名。
请问应该怎样改?谢谢!
最佳答案
2013-8-5 13:46
爱疯 发表于 2013-8-5 11:07
1楼也实现了你说的这两步了啊?每次test2结束后,mypath都在变呀

哦..才注意看你的代码,你没有进行转置啊亲..
arr定义为arr(1 to xx,1 to 1)

发表于 2013-8-5 10:14 | 显示全部楼层
这个好像戏子有个版本的,你可以问问他
回复

使用道具 举报

 楼主| 发表于 2013-8-5 10:23 | 显示全部楼层
wayy 发表于 2013-8-5 10:14
这个好像戏子有个版本的,你可以问问他

谢谢yy!
虽然其中我弄错了,但觉得从基本的开始,好学些{:301:}
回复

使用道具 举报

发表于 2013-8-5 10:47 | 显示全部楼层
爱疯 发表于 2013-8-5 10:23
谢谢yy!
虽然其中我弄错了,但觉得从基本的开始,好学些

把递归再弄清楚些应该就可以搞定了.
你可以先尝试自己做一下汉诺塔的代码.

回复

使用道具 举报

 楼主| 发表于 2013-8-5 10:59 | 显示全部楼层
Dj_soo 发表于 2013-8-5 10:47
把递归再弄清楚些应该就可以搞定了.
你可以先尝试自己做一下汉诺塔的代码.

谢谢DJ!
这个实用简单,又能看到效果,所以想从它入手。。。
我想等理解后,再看能否理解你说的
{:141:}
回复

使用道具 举报

发表于 2013-8-5 11:03 | 显示全部楼层
文件夹递归大概流程:
1.打开文件夹,输出当前文件夹名,然后输出所有文件夹下的文件名
2.判断此文件夹是否有子文件夹,如果有子文件夹,则转到1
就这么两部流程,从2转到1,则为递归
回复

使用道具 举报

发表于 2013-8-5 11:05 | 显示全部楼层
本帖最后由 Dj_soo 于 2013-8-5 11:07 编辑

大概翻译:
function print_folder(文件夹路径)
print(文件夹路径)
print(文件路径)
if(有下层文件夹)
for(每一个下层文件夹)
print_folder(下层文件夹路径)
next
end if
end function
回复

使用道具 举报

 楼主| 发表于 2013-8-5 11:07 | 显示全部楼层
Dj_soo 发表于 2013-8-5 11:03
文件夹递归大概流程:
1.打开文件夹,输出当前文件夹名,然后输出所有文件夹下的文件名
2.判断此文件夹是否有 ...

1楼也实现了你说的这两步了啊?每次test2结束后,mypath都在变呀
回复

使用道具 举报

发表于 2013-8-5 13:46 | 显示全部楼层    本楼为最佳答案   
爱疯 发表于 2013-8-5 11:07
1楼也实现了你说的这两步了啊?每次test2结束后,mypath都在变呀

哦..才注意看你的代码,你没有进行转置啊亲..
arr定义为arr(1 to xx,1 to 1)

回复

使用道具 举报

 楼主| 发表于 2013-8-5 15:52 | 显示全部楼层
Dj_soo 发表于 2013-8-5 13:46
哦..才注意看你的代码,你没有进行转置啊亲..
arr定义为arr(1 to xx,1 to 1)

忘了转置,悲哀 。。。改了

Dim FSO As Object, arr(1 To 10 ^ 7, 1 To 1), i
'主程序
Sub test1()
    Set FSO = CreateObject("scripting.filesystemobject")
    test2 "f:\Downloads"
    Cells.Clear
    If i Then [a1].Resize(i, 1) = arr
End Sub
'
Sub test2(MyPath As String)
    Dim Folder As Object, SubFolder As Object
    Dim FileCollection As Object, FileName As Object
    '
    Set Folder = FSO.getfolder(MyPath)
    Set FileCollection = Folder.Files
    For Each FileName In FileCollection
        i = i + 1: arr(i, 1) = FileName
    Next
    '
    For Each SubFolder In Folder.SubFolders
        test2 SubFolder.Path
    Next
End Sub


点评

你的10^7的数组也太大了点吧,好在你的电脑好,呵呵。  发表于 2013-8-5 15:55
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 18:02 , Processed in 0.286397 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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