код для циклического просмотра всех рабочих книг в папке VB - PullRequest
2 голосов
/ 20 октября 2010

У меня есть несколько файлов Excel (.xls), хранящихся в папке на локальном диске.Мне нужно сделать какой-то процесс для каждого файла в этой папке.Какой код будет

  1. проходить по каждому файлу
  2. , открыть файл
  3. Выполнить некоторую обработку и затем сохранить и закрыть файл
  4. после обработки переместите файл в другую папку

Для большей ясности я хочу просмотреть каждый файл и выполнить его обработку.После завершения файла перейдите к другому файлу и так до конца всех файлов в папке.У меня есть код для обработки;Мне просто нужно знать код, который будет перебирать файлы и затем перемещаться в другую папку.

Спасибо за вашу помощь заранее,

Ответы [ 3 ]

1 голос
/ 20 октября 2010

Вот простой способ сделать это с помощью объекта 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 у вас есть три варианта, как показано в следующих статьях базы знаний:

Как искать в каталогахнайти или перечислить файлы
КАК: Рекурсивно искать каталоги с помощью FileSystemObject

1 голос
/ 20 октября 2010

Вам нужна рекурсивная функция, которая перебирает дерево, представляющее файловую систему. Это означает перебирать все дочерние элементы некоторой «родительской папки». Я отправляю вам функцию, которая делает нечто похожее на ту, которая вам нужна (в настоящее время она используется). Эта функция удаляет все пустые папки, указанные в родительской папке.

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
0 голосов
/ 25 октября 2010

Следующий код будет читать файлы xlsx / xls из данной папки, игнорируя другие файлы, и перебирать каждый элементВы можете использовать его для любого набора расширений и фильтров.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...