我正在尝试使用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文件。
答案 0 :(得分:0)
如果还有人需要解决此问题。 VBA循环遍历目录和子文件夹。
在我无法使此处找到的代码无法正常工作之后。
我发现这个VBA来自 -
格雷厄姆市长 http://www.gmayor.com/document_batch_processes.htm唯一的问题是你需要调用函数而不是宏。
需要将宏转换为函数。
感谢Graham为所有那些需要批量处理目录中文档的人添加了 - 充满了深层嵌套的子文件夹!