![]() |
#4
|
|||
|
|||
![]()
Hi,
I tried the below code but getting some error. i want it to "recurse" through as many levels as it finds, can anyone please review the code. Your help is highly appreciated... ![]() Code:
Option Explicit Sub RecursiveFileSearch() Dim sourceFolder As String Dim destFolder As String Dim ws As Worksheet Dim nextRow As Long Dim fileName As String ' Set the source folder path sourceFolder = InputBox("Enter the source folder path:") ' Set the destination folder path destFolder = BrowseForFolder("Select the destination folder:") ' Check if the source folder path is provided If sourceFolder = "" Then Exit Sub ' Check if the destination folder path is provided If destFolder = "" Then Exit Sub ' Set the worksheet object Set ws = ThisWorkbook.Sheets("Sheet1") ' Replace "Sheet1" with your actual sheet name ' Find the next available row in the worksheet nextRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row + 1 ' Call the recursive search function RecursiveSearch sourceFolder, ws, nextRow, destFolder MsgBox "File search complete!", vbInformation End Sub Sub RecursiveSearch(ByVal folder As String, ByVal ws As Worksheet, ByRef nextRow As Long, ByVal destFolder As String) Dim fileSystem As Object Dim file As Object Dim subFolder As Object Dim fileName As String Dim filePath As String Dim fileExtension As String Dim found As Boolean ' Create the file system object Set fileSystem = CreateObject("Scripting.FileSystemObject") ' Loop through each file in the folder For Each file In fileSystem.GetFolder(folder).Files ' Get the file name and extension fileName = fileSystem.GetBaseName(file.Name) fileExtension = LCase(fileSystem.GetExtensionName(file.Path)) ' Search for file name in column A and update status in column B found = False With ws.Range("A:A") Set file = .Find(fileName, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False) If Not file Is Nothing Then found = True ' Update status as available ws.Cells(file.Row, 2).value = "Available" ' Copy the file to destination folder if it matches the allowed file types If fileExtension = "docx" Or fileExtension = "rtf" Or fileExtension = "pdf" Or fileExtension = "xlsx" Then file.Copy destFolder & "\" & fileName & "." & fileExtension End If End If End With ' If file name not found, update status as not available If Not found Then nextRow = nextRow + 1 ws.Cells(nextRow, 1).value = fileName ws.Cells(nextRow, 2).value = "Not Available" End If Next file ' Recursively search sub-folders For Each subFolder In fileSystem.GetFolder(folder).SubFolders RecursiveSearch subFolder.Path, ws, nextRow, destFolder Next subFolder End Sub Function BrowseForFolder(ByVal prompt As String) As String Dim objShell As Object, objFolder As Object Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.BrowseForFolder(0, prompt, 0) If Not objFolder Is Nothing Then BrowseForFolder = objFolder.self.Path & "\" Else BrowseForFolder = "" End If Set objFolder = Nothing Set objShell = Nothing End Function |
|
![]() |
||||
Thread | Thread Starter | Forum | Replies | Last Post |
Batch change the font style in multiple word files inside folder and subfolders | kalagas | Word VBA | 11 | 10-05-2023 05:13 AM |
Pls help - copying data from multiple word files | handclips | Word VBA | 3 | 01-24-2021 01:57 PM |
![]() |
eduzs | Word VBA | 5 | 06-09-2019 06:20 AM |
Searching through folders/ subfolders and rename files if certain condition is met | mihnea96 | Excel | 1 | 05-15-2017 07:09 AM |
![]() |
Metamag | Office | 3 | 05-09-2011 06:25 PM |