为了账号安全,请及时绑定邮箱和手机立即绑定

使用VBA循环遍历所有子文件夹

使用VBA循环遍历所有子文件夹

使用VBA循环遍历所有子文件夹我正在寻找一个VBA脚本,它将遍历指定文件夹的所有子文件夹。当我说所有子文件夹时,我指的是指定文件夹中的每个文件夹,以及其中的每个文件夹.理论上可以有无限个嵌套子文件夹,但实际上它可能不会超过3或4。我使用的是VBA脚本运行时对象,这样一旦我循环到文件夹中,我就可以检查一些文件的属性(但我知道怎么做)。谢谢你的帮助!这个问题不同于前面问题中列出的“相似”问题包含已知的目录,而这里的需要是查找已知的和未知的目录。还需要多个子目录层。你们真的应该在发射“复制”之前读一下这个问题。
查看完整描述

3 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

只是一个简单的文件夹向下钻。

Dim FileSystem As ObjectDim HostFolder As StringHostFolder = "C:\"Set FileSystem = CreateObject("Scripting.FileSystemObject")
DoFolder FileSystem.GetFolder(HostFolder)Sub DoFolder(Folder)
    Dim SubFolder    For Each SubFolder In Folder.SubFolders
        DoFolder SubFolder    Next
    Dim File    For Each File In Folder.Files        ' Operate on each file
    NextEnd Sub


查看完整回答
反对 回复 2019-07-12
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

并补充里奇的递归答案,一种非递归的方法。

Public Sub NonRecursiveMethod()
    Dim fso, oFolder, oSubfolder, oFile, queue As Collection    Set fso = CreateObject("Scripting.FileSystemObject")
    Set queue = New Collection
    queue.Add fso.GetFolder("your folder path variable") 'obviously replace

    Do While queue.Count > 0
        Set oFolder = queue(1)
        queue.Remove 1 'dequeue
        '...insert any folder processing code here...
        For Each oSubfolder In oFolder.SubFolders
            queue.Add oSubfolder 'enqueue
        Next oSubfolder        For Each oFile In oFolder.Files            '...insert any file processing code here...
        Next oFile    LoopEnd Sub

您可以为FIFO行为使用队列(如上文所示),也可以为LIFO行为使用堆栈,该堆栈的处理顺序与递归方法相同(替换Set oFolder = queue(1)带着Set oFolder = queue(queue.Count)替换queue.Remove(1)带着queue.Remove(queue.Count),并且可能将变量重命名为.)


查看完整回答
反对 回复 2019-07-12
?
月关宝盒

TA贡献1772条经验 获得超5个赞

其他两个已经存储在集合中,然后我们将在接下来的2个循环中处理该集合(请不要忘记queue.Remove 1移除第一个文件夹,因此第二个文件夹现在是集合的第一个成员,并在下一个对Queue(1)的调用中检索。堆栈方法则相反,总是对添加的最后一个文件夹进行操作(用Queue(Quee.Count)替换Queue(1),用Quee.Remove Quee.Count替换Quee.Remove 1)。

查看完整回答
反对 回复 2019-07-12
  • 3 回答
  • 0 关注
  • 1848 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信