【问题标题】:VBA macro to list files in multiple foldersVBA宏列出多个文件夹中的文件
【发布时间】:2013-11-28 01:57:10
【问题描述】:

我有以下代码,我想获取水平列出的各个文件夹中的文件。如何修改此代码,以便对于 A 列中的给定文件路径,我从 C 列中获取此列中的文件?我的知识只允许我为一个文件夹执行此操作(而不是我希望它查看的 150 个)


`enter code here`
Sub ListFiles()
  iCol = 3
  Call ListMyFiles(Range("A5"), Range("B5"))
End Sub

Sub ListMyFiles(mySourcePath, IncludeSubfolders)
    Set MyObject = New Scripting.FileSystemObject
    Set mySource = MyObject.GetFolder(mySourcePath)
    On Error Resume Next
    For Each myFile In mySource.Files
        iRow = 5

        Cells(iRow, iCol).Value = myFile.Name
        iCol = iCol + 1

    Next
    If IncludeSubfolders Then
        For Each mySubFolder In mySource.SubFolders
            Call ListMyFiles(mySubFolder.Path, True)
        Next

    End If
End Sub

【问题讨论】:

  • 这很简单(只需将iCol 放在你有iRow 的位置,反之亦然;Cells(iRow, iCol).Value 除外)。你应该尝试一下;并且显示“之前”听起来根本没有尝试过任何东西。

标签: excel vba file directory


【解决方案1】:

我在 Excel 2007 中对此进行了测试:

Sub ListMyFiles(mySourcePath, IncludeSubfolders, iRow, iCol)
  Dim iColNow, iColSub
  Dim MyObject, mySource, myFile, mySubFolder
  Set MyObject = CreateObject("Scripting.FileSystemObject")
  Set mySource = MyObject.GetFolder(mySourcePath)
  On Error Resume Next
  iColNow = iCol
  For Each myFile In mySource.Files
    Cells(iRow, iColNow).Value = myFile.Name
    iColNow = iColNow + 1
  Next
  If IncludeSubfolders Then
    '
    'iColSub = iCol + 1
    '
    iColSub = iCol
    For Each mySubFolder In mySource.SubFolders
      iRow = iRow + 1
      Call ListMyFiles(mySubFolder.Path, IncludeSubfolders, iRow, iColSub)
    Next
  End If
End Sub

Sub ListFiles()
  Dim iRow, iCol
  iRow = 5
  iCol = 3
  Call ListMyFiles(Range("A5"), Range("B5"), iRow, iCol)
End Sub

IRow 和 iCol 是函数参数,用于控制结果输出的起始位置。 Range("A5") 给出起始文件夹名称,如 C:\temp,Range("B5") 是列出控制键的子文件夹,1=true,0=false。

========>

将为包含文件条目的文件夹创建一个空白行。

iRow 被递归修改,以便更改每个子文件夹的行。

【讨论】:

    【解决方案2】:
    'it's all in iRow
    `enter code here`
    Dim iRow as integer
    Sub ListFiles()
      iCol = 3
      iRow = 5
      Call ListMyFiles(Range("A5"), Range("B5"))
    End Sub
    
    Sub ListMyFiles(mySourcePath, IncludeSubfolders)
        Set MyObject = New Scripting.FileSystemObject
        Set mySource = MyObject.GetFolder(mySourcePath)
        On Error Resume Next
        For Each myFile In mySource.Files
    
    
            Cells(iRow, iCol).Value = myFile.Name
            iCol = iCol + 1              
        Next
        iRow = iRow + 1 
        If IncludeSubfolders Then
            For Each mySubFolder In mySource.SubFolders
                Call ListMyFiles(mySubFolder.Path, True)
            Next
    
        End If
    End Sub
    

    【讨论】:

    • 在回答之前,您应该查看 cmets/other 答案。如果您有不同的想法并决定继续为 OP 编写代码;您至少应该从这些其他答案中提取尽可能多的信息;并确保你的答案是正确的。请测试您的代码并确认它没有提供 OP 想要的内容;我建议您按照我评论中的指示进行操作。
    • 迷路了,当我对他们的代码进行非常小的更正时,您的评论没有出现,感谢您的建议!
    猜你喜欢
    • 2022-01-17
    • 2016-05-17
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多