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

Vba 循环浏览文件夹-将宏应用于所有文件,vba,ms-word,Vba,Ms Word,我正在尝试使用以下VBA代码在文件夹中循环: 我只是复制并添加了自己的宏的代码。虽然它没有给出一个错误。代码不起作用。当我运行宏时,它根本没有响应 我有500多个文件需要应用宏-其中一些文件确实深入嵌套在文件夹中 如果有人能帮我创建一个工作宏,我将不胜感激。 在堆栈交换上找到的-要么给出错误,要么干脆不响应 如果有人在这里提交了一个启用宏的工作版本的代码,这将是一个很大的帮助 我很清楚,有VBA excel循环通过文件夹代码,还有一个递归的-当我测试这些解决方案时,它们不适合我。这并不是说他们根

我正在尝试使用以下VBA代码在文件夹中循环:

我只是复制并添加了自己的宏的代码。虽然它没有给出一个错误。代码不起作用。当我运行宏时,它根本没有响应

我有500多个文件需要应用宏-其中一些文件确实深入嵌套在文件夹中

如果有人能帮我创建一个工作宏,我将不胜感激。 在堆栈交换上找到的-要么给出错误,要么干脆不响应

如果有人在这里提交了一个启用宏的工作版本的代码,这将是一个很大的帮助

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

把我指向其他的线索对我没有帮助——我读了所有的线索。 我花时间测试它们

这就是我需要的:

-在文件夹>子文件夹>子文件夹中查找特定类型的文件 -对其应用我自己的宏

在堆栈交换上找到版本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
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
我通过文件夹代码查看了其他VBA循环。我一直无法让他们工作

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

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

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
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
以上也不起作用-我做错什么了吗

这就是我需要的:

-在文件夹>子文件夹>子文件夹中查找特定类型的文件 -对其应用我自己的宏


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

如果有人仍然需要解决此问题的方法。VBA循环浏览目录和子文件夹

在我无法使这里找到的代码正常工作之后,不管是什么原因

我已从以下位置找到此VBA加载项-

格雷厄姆市长

唯一的问题是您需要调用函数,而不是宏

宏需要转换为函数


感谢Graham为所有需要在一个目录中批处理文档的人提供了一个很棒的外接程序,这个目录中充满了嵌套很深的子文件夹

这篇文章为你展示了一个VBA代码的工作版本:嗨,我刚刚测试过它——由于某种原因它不工作。我确信我没有做正确的事情。你使用ActiveDocument,但是循环没有改变。ActiveDocument只是一开始打开的文档。您需要包含更多的内容,可能是要首先实际打开文件。您好,我只想对文件夹及其子文件夹中的所有文件应用宏。我昨天真的花了一整天的时间试图找到一个有效的版本。我不是VBA程序员,因此我真的需要专业人士的帮助。每当我将代码粘贴到word宏中时,它都不会执行。嗨,谢谢,这是一件非常光荣的事情,当我清楚地表明我正在测试代码,但它对我不起作用时,请投反对票。没有人帮我指出错误在哪里。这是一个新手寻求帮助的地方。但是,如果没有人愿意帮忙,而只是重定向到我已经阅读和测试过的线程,那就是卑鄙和傲慢。