2017-02-03 5 views
1

В настоящее время у меня есть рабочая книга, предназначенная для индексации папки, в которую вы вводите путь к папке, например. «Z: \ Example» и экспортирует все имена файлов и пути к файлам для всего, что находится в этой конкретной папке, на другой лист в книге. Мне было интересно, можно ли захватить все файлы в этой папке («Z: \ Example»), и если в этом каталоге есть другие папки, также возьмите все файлы в этой папке.Excel file directory grabber

E.g. Я ввожу «Z: \ Example» в ячейку A19 (согласно приведенному ниже коду), «Z: \ Example» имеет в нем другую папку, Z: \ Example \ Another '. Все файлы внутри как «Z: \ Пример» и Z: \ Пример \ Другой»получить принесенные в Excel лист 2.

Private Sub CommandButton1_Click() 

    Dim objFSO As Object 
    Dim objFolder As Object 
    Dim objFile As Object 
    Dim i As Integer 
    Dim Source_Workbook As Workbook 
    Dim Target_Path As String 

    'Create an instance of the FileSystemObject 
    Set objFSO = CreateObject("Scripting.FileSystemObject") 

    'Path of the Target Folder 
    Target_Path = Range("A19").Value 

    Set Target_Workbook = Workbooks.Open(Target_Path) 
    Set Source_Workbook = ThisWorkbook 

    'Get the folder object 

    Set objFolder = objFSO.GetFolder(Target_Path) 
    i = 1 
    'loops through each file in the directory and prints their names and path 

    For Each objFile In objFolder.Files 
     'print file name 
     Source_Workbook.Sheets(2).Cells(i + 1, 1) = objFile.Name 
     'print file path 
     Source_Workbook.Sheets(2).Cells(i + 1, 2) = objFile.Path 
     i = i + 1 
    Next objFile 

    'Process Completed 
    msgBox "Task Completed" 
End Sub 

Я предпочел бы не иметь, чтобы вставить все пути, которые я хочу проиндексированы в начале, но если это неизбежно, все в порядке. Любая помощь оценивается.

Благодаря

+1

Открытие файлов ('Set Target_Workbook = Workbooks.Open (Target_Path)') бесполезно. –

+0

Извините, укоротил этот скрипт от другого, возможно, оставил его. Спасибо! – user7433828

+1

Я думаю, вы можете найти здесь тот же самый вопрос. Ответы принимаются методы _recursive_ – user3598756

ответ

0

Как в комментариях, есть много ресурсов, чтобы перечислить папки и ее подпапок. Этот фрагмент настроен для вашего приложения. Он использует рекурсию и нуждается в корневой папке и целевой ячейке, где нужно вставить результаты.

Private Sub CommandButton1_Click() 
    'Call the recursive function 
    ListAllFiles ThisWorkbook.Sheets(1).Range("A19").Value, ThisWorkbook.Sheets(2).Cells(2, 1) 
    msgBox "Task Completed" 
End Sub 


Private Sub ListAllFiles(root As String, targetCell As Range) 
    Dim objFSO As Object, objFolder As Object, objSubfolder As Object, objFile As Object 
    Dim i As Integer, Target_Path As String 

    'Create an instance of the FileSystemObject 
    Set objFSO = CreateObject("Scripting.FileSystemObject") 
    'Get the folder object 
    Set objFolder = objFSO.GetFolder(root) 
    'loops through each file in the directory and prints their names and path 

    For Each objFile In objFolder.Files 
     'print file name 
     targetCell.Value = objFile.Name 
     'print file path 
     targetCell.Offset(, 1).Value = objFile.Path 
     Set targetCell = targetCell.Offset(1) 
    Next objFile 

    ' Recursively call the function for subfolders 
    For Each objSubfolder In objFolder.SubFolders 
     ListAllFiles objSubfolder.Path, targetCell 
    Next objSubfolder 
End Sub