指定要循环通过 Excel/VBA 的附加目录

Posted

技术标签:

【中文标题】指定要循环通过 Excel/VBA 的附加目录【英文标题】:Specify Additional Directory to Loop Through Excel/VBA 【发布时间】:2012-05-05 09:26:08 【问题描述】:

我正在使用文件系统对象循环遍历一组目录,并且我想指定一个额外的目录来循环遍历。例如,我目前有:

Sub test()
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFolder = objFSO.GetFolder(Directory)
    Set colSubfolders = objFolder.Subfolders
    For Each objSubfolder In colSubfolders
        ' take some action
    End For
End Sub

但是,我想指定一个额外的文件夹来循环,例如:

colSubfolders = colSubfolders + "additionalpath"
For Each objSubfolder In colSubfolders ....

或者,是否可以在循环命令中指定多个对象,例如:

For Each objSubfolder in colSubfolders, "additionalpath"

【问题讨论】:

你可以做第二个单独的循环。如果您希望第二个循环成为文件夹列表,请创建一个字符串数组并遍历该数组。 【参考方案1】:

最简单的方法是分解枚举目录的代码和“采取一些行动”的代码,并将其包装在一个重复你需要的调用中;

Sub foo()
    enumDirs "c:\temp\", "c:\music", "c:\as many as you like ..."
End Sub

Sub enumDirs(ParamArray strPaths() As Variant)
    Dim i As Long
    For i = 0 To UBound(strPaths)
        enumDir CStr(strPaths(i))
    Next
End Sub

Sub enumDir(strPath As String)
    Dim objFolder As Object, colSubfolders As Object, objSubfolder As Object
    Set objFolder = CreateObject("Scripting.FileSystemObject").GetFolder(strPath)
    Set colSubfolders = objFolder.Subfolders
    For Each objSubfolder In colSubfolders
        TakeSomeAction strPath, objSubfolder.Name
    Next
End Sub

sub TakeSomeAction(strRoot As String, strFoundPath As String)
    Debug.Print ">"; strRoot & ", " & strFoundPath
End sub

【讨论】:

感谢您的提示 -- 应该考虑结束行动。

以上是关于指定要循环通过 Excel/VBA 的附加目录的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA:循环遍历 ActiveSheet 中的单元格

用EXCEL VBA获取指定目录下的文件名(包括文件夹名)

Excel VBA - 保留指定列并删除所有其他列

为啥Excel VBA中调用的exe不输出文件?

excel VBA'循环时'的问题。似乎无法找到结束循环的布尔值

excel vba 的读取列,写入列,循环和if 的一些操作