【问题标题】:Loop through a specific list of folders and their subFolders VBA Macro循环浏览特定的文件夹列表及其子文件夹 VBA 宏
【发布时间】:2016-11-23 18:23:39
【问题描述】:

我创建了一个解决方案,从路径循环遍历所有文件夹及其子文件夹,然后根据条件移动文件。

Sub Move_Files_To_Folder()

Dim Fso As Object, objFolder As Object, objSubFolder As Object
Dim FromPath As String
Dim FileInFolder As Object

FromPath = "C:\Reports\"
Set Fso = CreateObject("Scripting.filesystemobject")
Set objFolder = Fso.GetFolder(FromPath)

For Each objSubFolder In objFolder.subfolders
    For Each FileInFolder In objSubFolder.Files

        If InStr(1, FileInFolder.name, ".xlsx") Or InStr(1, FileInFolder.name, ".zip") Then
            FileInFolder.Move (objSubFolder.Path & "\2016\" & MonthName(Month(FileInFolder.DateCreated)) & "\")
        End If

    Next FileInFolder
Next objSubFolder

End Sub

它工作正常,但我想调整我的宏以循环遍历我的路径下的特定文件夹及其所有子文件夹。

因此,我想创建一个数组列表,而不是 For Each objSubFolder In objFolder.subfolders,其中包含要循环遍历的路径下的文件夹名称。

像这样的

FoldersName = Array("Shipment", "Backlog", "Released", "Unreleased") 
For Each objSubFolder In objFolder.FoldersName
For Each FileInFolder In objSubFolder.Files
'rest of my code
Next FileInFolder
Next objSubFolder

总而言之,我的解决方案循环遍历路径下的所有文件夹和子文件夹,我想将其调整为路径下的文件夹列表及其所有子文件夹。

我尝试创建此 array 并将其添加到 For Each 但每次我运行时都会在该行中收到错误。任何建议请如何正确编写?非常感谢。

【问题讨论】:

    标签: vba excel macros


    【解决方案1】:

    只需遍历数组,每次都为 objFolder 创建一个新路径。 这应该有效:

    Sub Move_Files_To_Folder()
    
    Dim Fso As Object, objFolder As Object, objSubFolder As Object
    Dim FromPath As String
    Dim FileInFolder As Object, i as integer
    
    FoldersName = Array("Shipment", "Backlog", "Released", "Unreleased") 
    FromPath = "C:\Reports\"
    Set Fso = CreateObject("Scripting.filesystemobject")
    
    for i = 1 to ubound(FoldersName)
    
      Set objFolder = Fso.GetFolder(FromPath & FoldersName(i) & "\")
    
      For Each objSubFolder In objFolder.subfolders
        For Each FileInFolder In objSubFolder.Files
    
            If InStr(1, FileInFolder.name, ".xlsx") Or InStr(1, FileInFolder.name, ".zip") Then
                FileInFolder.Move (objSubFolder.Path & "\2016\" & MonthName(Month(FileInFolder.DateCreated)) & "\")
            End If
    
        Next FileInFolder
    Next objSubFolder
    next
    
    End Sub
    

    【讨论】:

      【解决方案2】:

      您可以使用 Dictionary 对象(脚本库)并为每个子文件夹名称查找它

      Dim dic As Object
      Set dic = CreateObject("Scripting.dictionary")
      For Each word In Array("Shipment", "Backlog", "Released", "Unreleased")
          dic.Add word, word
      Next
      
      For Each objSubFolder In objFolder.SubFolders
          If dic.contains(objSubFolder.Name) Then
          'etc etc..
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-06
        • 1970-01-01
        • 2012-05-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多