循环文件夹 - 将宏应用于所有文件

时间:2015-09-09 18:36:51

标签: vba ms-word word-vba

我正在尝试使用VBA代码遍历文件夹在此处找到:Loop Through All Subfolders Using VBA

我刚刚复制的代码并添加了我自己的宏。虽然它没有给出错误。代码无效。当我运行宏时,它根本没有响应。

我有500多个文件需要应用宏 - 有些文件真的嵌套在文件夹中。

我真的很感激有人帮我创建一个有效的宏。 在堆栈交换中找到的 - 要么出错,要么根本不回应。

如果任何人在这里提交了一个启用宏的工作版本的代码 - 那将是一个很大的帮助。

我很清楚VBA excel循环遍历文件夹代码,还有一个递归的 - 当我测试这些解决方案时,它们对我不起作用。这并不是说他们根本不工作。

指向其他线程并没有帮助我 - 我已经阅读了所有线程。 我花时间测试它们。

这就是我需要的:

- 查找某种类型的文件,即文件夹中的docx> SubFolder>子文件夹   - 将我自己的宏应用于它

在堆栈交换中找到版本1:

Sub NewFolder()
    Dim FileSystem As Object
    Dim HostFolder As String
    HostFolder = "C:\Users\Shana\Desktop 2\Folder1\"
    Set FileSystem = CreateObject("Scripting.FileSystemObject")
    DoFolder FileSystem.GetFolder(HostFolder)
End Sub

Sub DoFolder(Folder)
    Dim SubFolder
    For Each SubFolder In Folder.SubFolders
        DoFolder SubFolder
    Next
    Dim File
    For Each File In Folder.Files
        ActiveDocument.Range.Text = "Replaced"
        ' Operate on each file
    Next
End Sub

我通过文件夹代码查看了其他VBA循环。我一直无法让他们工作。

我在VBA编辑器中创建宏时的代码根本不起作用。

在堆栈交换中找到版本2:

Function GetFilesIn(Folder As String) As Collection
    Dim F As String
    Set GetFilesIn = New Collection
    F = Dir(Folder & "\*")
    Do While F <> ""
        GetFilesIn.Add F
        F = Dir
    Loop
End Function

Function GetFoldersIn(Folder As String) As Collection
    Dim F As String
    Set GetFoldersIn = New Collection
    F = Dir(Folder & "\*", vbDirectory)
    Do While F <> ""
        If GetAttr(Folder & "\" & F) And vbDirectory Then GetFoldersIn.Add F
        F = Dir
    Loop
End Function

Sub Test()
    Dim C As Collection, F
    Debug.Print
    Debug.Print "Files in C:\"
    Set C = GetFilesIn("C:\Users\Shana\Desktop 2\Folder1\")
    For Each F In C
        Debug.Print F
    Next F
    Debug.Print
    Debug.Print "Folders in C:\"
    Set C = GetFoldersIn("C:\Users\Shana\Desktop 2\Folder1\")
    For Each F In C
        ActiveDocument.Range.Text = "Replaced"
        'Debug.Print F
    Next F
End Sub

以上也行不通 - 我做错了什么?

这就是我需要的:

- 查找某种类型的文件,即文件夹中的docx&gt; SubFolder&gt;子文件夹   - 将我自己的宏应用于它

请不要将其标记为重复,因为我需要使用VBA代码的工作版本来循环浏览所有docx文件。

1 个答案:

答案 0 :(得分:0)

如果还有人需要解决此问题。 VBA循环遍历目录和子文件夹。

在我无法使此处找到的代码无法正常工作之后。

我发现这个VBA来自 -

格雷厄姆市长 http://www.gmayor.com/document_batch_processes.htm

唯一的问题是你需要调用函数而不是宏。

需要将宏转换为函数。

感谢Graham为所有那些需要批量处理目录中文档的人添加了 - 充满了深层嵌套的子文件夹!