Hi,
I have the VBA below which extracts folders, sub-folders & file names from a specified parent folder and drops them into Excel. The code is excellent and works well but I'm wondering how can it be modified so it only lists files with specific associations? For example; initially I only want to retrieve filenames in the folders that have the associations .mp3 and .flac with all the folders being retrieved as normal. I would like to be able to identify these associations in the code and change them when required to say .jpg .xlsm etc.
Any help much appreciated.
I have the VBA below which extracts folders, sub-folders & file names from a specified parent folder and drops them into Excel. The code is excellent and works well but I'm wondering how can it be modified so it only lists files with specific associations? For example; initially I only want to retrieve filenames in the folders that have the associations .mp3 and .flac with all the folders being retrieved as normal. I would like to be able to identify these associations in the code and change them when required to say .jpg .xlsm etc.
Any help much appreciated.
VBA Code:
Option Explicit
Public Sub Main_List_Folders_and_Files()
Dim startFolderPath As String
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Select Folder"
If Not .Show Then
MsgBox "User cancelled"
Exit Sub
End If
startFolderPath = .SelectedItems(1)
End With
With ActiveSheet
.Cells.Clear
List_Folders_and_Files startFolderPath, .Range("A1")
End With
End Sub
Private Function List_Folders_and_Files(folderPath As String, destCell As Range) As Long
Dim FSO As Object
Dim FSfolder As Object, FSsubfolder As Object, FSfile As Object
Dim folders As Collection, levels As Collection
Dim subfoldersColl As Collection
Dim n As Long, c As Long, i As Long
Set FSO = CreateObject("Scripting.FileSystemObject")
Set folders = New Collection
Set levels = New Collection
'Add start folder to stack
folders.Add FSO.GetFolder(folderPath)
levels.Add 0
n = 0
Do While folders.Count > 0
'Remove next folder from top of stack
Set FSfolder = folders(folders.Count): folders.Remove folders.Count
c = levels(levels.Count): levels.Remove levels.Count
'Output this folder and its files
destCell.Offset(n, c).Value = "'" & FSfolder.Name
n = n + 1
c = c + 1
For Each FSfile In FSfolder.Files
destCell.Offset(n, c).Value = "'" & FSfile.Name
n = n + 1
Next
'Get collection of subfolders in this folder
Set subfoldersColl = New Collection
For Each FSsubfolder In FSfolder.SubFolders
subfoldersColl.Add FSsubfolder
Next
'Loop through collection in reverse order and put each subfolder on top of stack. As a result, the subfolders are processed and
'output in the correct ascending ASCII order
For i = subfoldersColl.Count To 1 Step -1
If folders.Count = 0 Then
folders.Add subfoldersColl(i)
levels.Add c
Else
folders.Add subfoldersColl(i), , , folders.Count
levels.Add c, , , levels.Count
End If
Next
Set subfoldersColl = Nothing
Loop
List_Folders_and_Files = n
End Function