【问题标题】:Loop Through Folders - Apply Macro to All Files循环遍历文件夹 - 将宏应用于所有文件
【发布时间】:2015-09-09 18:36:50
【问题描述】:

我正在尝试使用 VBA 代码循环浏览文件夹在此处找到:Loop Through All Subfolders Using VBA

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

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

我真的很感激有人帮助我创建一个工作宏。 在堆栈交换中找到的那些 - 要么给出错误,要么根本不响应。

如果有人拥有此处提交的代码的启用宏的工作版本 - 这将是一个很大的帮助。

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

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

这就是我需要的:

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

在 Stack exchange 上找到第 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 - 应用我自己的宏

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

【问题讨论】:

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

标签: vba ms-word


【解决方案1】:

如果有人仍然需要解决这个问题。 VBA 循环遍历目录和子文件夹。

无论出于何种原因,我都无法使此处找到的代码正常工作。

我发现这个 VBA 插件来自 -

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

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

宏需要转成函数。

感谢 Graham 为所有需要在目录中批处理文档的人提供了伟大的插件 - 充满了深度嵌套的子文件夹!

【讨论】:

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