代码循环遍历文件夹VB中的所有工作簿

我有一些Excel(.xls)存储在本地驱动器的文件夹中。 我需要对该文件夹中的每个文件执行一些操作。 什么是代码将

  1. 遍历每个文件
  2. 打开文件
  3. 做一些处理,然后保存并closures文件
  4. 处理后将文件移动到另一个文件夹

为了更清楚一点,我想查看每个文件并对其进行处理。 完成文件后,转到另一个文件,直到文件夹中的所有文件结束。 我确实有处理的代码; 我只需要知道将通过文件循环,然后移动到另一个文件夹的代码。

感谢您的帮助,

你需要的是一个迭代代表文件系统的树的recursion函数。 这意味着遍历一些“父文件夹”的所有孩子。 我发给你一个类似的function,你需要的(目前正在使用)。 该function删除给定父文件夹的所有空文件夹。

Public Function gf_DeleteEmptyFolder(path As String) As Boolean On Error GoTo Error_Handler Dim fso_folder As Scripting.Folder, sub_folder As Scripting.Folder If g_FSO.FolderExists(path) Then Set fso_folder = g_FSO.GetFolder(path) '-- eliminates de folder only if is empty If 0 = fso_folder.Files.Count And 0 = fso_folder.SubFolders.Count Then Call g_FSO.DeleteFolder(path, False) '-- recursively calls the function Else For Each sub_folder In fso_folder.SubFolders Call gf_DeleteEmptyFolder(sub_folder.path) Next End If End If gf_DeleteEmptyFolder = True Exit Function '~~~ on error Error_Handler: gf_DeleteEmptyFolder = False End Function 

如果您的文件存储在一个简单的文件夹中,则可以使用以下代码来遍历每个文件。

 Public Sub fsoProcessFilesInFolder(sFolder As String) Dim fso As Scripting.FileSystemObject, fld As Scripting.Folder, fil As Scripting.File Set fso = New FileSystemObject Set fld = fso.GetFolder(sFolder) For Each fil In fld.Files '--- add code to process your files Next fil End Sub 

这是简单的VBA对象的方式来做到这一点:

 Dim fs As FileSearch Dim i As Integer Dim wbk As Workbook Set fs = Application.FileSearch With fs .LookIn = ThisWorkbook.Path .FileName = "*.xls" For i = 1 to .Execute() Set wbk = Workbooks.Open(.FoundFiles(i)) ''//DO STUFF HERE wbk.Close(SaveChanges:=True) Next i End With 

在VB6中,您有三个选项,如下面的知识库文章所示:

如何search目录以查找或列出文件
如何:使用FileSystemObjectrecursionsearch目录

以下代码将从给定文件夹中读取xlsx / xls文件,忽略其他文件并遍历每个项目。 您可以将其用于任何一组扩展程序和filter。

 Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFolder = objFSO.GetFolder(folderPath) Set objFiles = objFolder.Files 'Iterate through the files in the folder For Each Item In objFiles If LCase(Right(Item.Name, 5)) = ".xls" Or LCase(Right(Item.Name, 4)) = ".xlsx" Then ''''''Do Stuffs Here'''''' End If Next