Solved

Directory content from two different folders with Excel VBA

Posted on 2014-07-23
5
331 Views
Last Modified: 2014-07-24
Hi,


I'm looking to use VBA to retrieve the contents of two or three different folders and combine results.

e.g.
C:\Users\User\Music
C:\Users\User\Videos




I have used the below, but it has to be run twice

Dim iRow

Sub ListFiles()
    iRow = 11
    Call ListMyFiles(Range("C7"), Range("C8"))
End Sub

Sub ListMyFiles(mySourcePath, IncludeSubfolders)
    Set MyObject = New Scripting.FileSystemObject
    Set mySource = MyObject.GetFolder(mySourcePath)
    On Error Resume Next
    For Each myFile In mySource.Files
        iCol = 2
        Cells(iRow, iCol).Value = myFile.Path
        iCol = iCol + 1
        Cells(iRow, iCol).Value = myFile.Name
        iCol = iCol + 1
        Cells(iRow, iCol).Value = myFile.Size
        iCol = iCol + 1
        Cells(iRow, iCol).Value = myFile.DateLastModified
        iRow = iRow + 1
    Next
    If IncludeSubfolders Then
        For Each mySubFolder In mySource.SubFolders
            Call ListMyFiles(mySubFolder.Path, True)
        Next
    End If
End Sub
0
Comment
Question by:kieranjcollins
  • 3
  • 2
5 Comments
 
LVL 27

Expert Comment

by:MacroShadow
ID: 40216108
Use this code, it assumes that the path is in A1:A3 and B1:B3 is either true or false depending on whether subfolders should be included.
Sub ListFiles()
    Dim rng As Range, c As Range
    Set rng = Range("A1:A3")
    For Each c In rng.Cells
        Call ListMyFiles(Range("A" & c.Row), Range("B" & c.Row))
    Next
End Sub

Sub ListMyFiles(mySourcePath, IncludeSubfolders)
    Dim iRow As Long, iCol As Long
    Dim MyObject As Object, mySource As Object, myFile As Object, mySubFolder As Object
    iRow = 11
    Set MyObject = CreateObject("Scripting.FileSystemObject")
    Set mySource = MyObject.GetFolder(mySourcePath)
    On Error Resume Next
    For Each myFile In mySource.Files
        iCol = 2
        Cells(iRow, iCol).Value = myFile.Path
        iCol = iCol + 1
        Cells(iRow, iCol).Value = myFile.Name
        iCol = iCol + 1
        Cells(iRow, iCol).Value = myFile.Size
        iCol = iCol + 1
        Cells(iRow, iCol).Value = myFile.DateLastModified
        iRow = iRow + 1
    Next
    If IncludeSubfolders Then
        For Each mySubFolder In mySource.SubFolders
            Call ListMyFiles(mySubFolder.Path, True)
        Next
    End If
End Sub

Open in new window

0
 

Author Comment

by:kieranjcollins
ID: 40216204
The listing of the second folder contents in the above start populating on the first row, overwriting the contents of the first folder.

Can the code work so that folder 2 contents are stacked on folder 1 contents etc?
0
 
LVL 27

Accepted Solution

by:
MacroShadow earned 500 total points
ID: 40216266
Try this:
Dim iRow As Long

Sub ListFiles()
    Dim rng As Range, c As Range
    Set rng = Range("A1:A3")
    iRow = IIf(iRow = 1048576, Range("C1").End(xlDown).Row, 1)
    For Each c In rng.Cells
        Call ListMyFiles(Range("A" & c.Row), Range("B" & c.Row))
    Next
End Sub

Sub ListMyFiles(mySourcePath, IncludeSubfolders)
    Dim MyObject As Object, mySource As Object, myFile As Object, mySubFolder As Object
    Set MyObject = CreateObject("Scripting.FileSystemObject")
    Set mySource = MyObject.GetFolder(mySourcePath)
    On Error Resume Next
    For Each myFile In mySource.Files
        Cells(iRow, 3).Value = myFile.Path
        Cells(iRow, 4).Value = myFile.Name
        Cells(iRow, 5).Value = myFile.Size
        Cells(iRow, 6).Value = myFile.DateLastModified
        iRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, "C").End(xlUp).Row + 1
    Next
    If IncludeSubfolders Then
        For Each mySubFolder In mySource.SubFolders
            Call ListMyFiles(mySubFolder.Path, True)
        Next
    End If
    ActiveSheet.UsedRange.Columns.AutoFit
End Sub

Open in new window

0
 

Author Closing Comment

by:kieranjcollins
ID: 40216407
That worked a treat, thank you very much!
0
 
LVL 27

Expert Comment

by:MacroShadow
ID: 40216427
You're welcome.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Introduction This Article is a follow-up to my Mappit! Addin Article (http://www.experts-exchange.com/A_2613.html), it was inspired by an email posting I made to EUSPRIG (http://www.eusprig.org/index.htm), I will briefly cover: 1) An overvie…
Approximate matching with VLOOKUP and MATCH seems to me to be a greatly under-used technique, and one which is vital for getting good performance out of large lookups. Until recently I would always have advised using an exact match for simplicity an…
Graphs within dashboards are meant to be dynamic, representing data from a period of time that will change each time the dashboard is updated with new data. Rather than update each graph to point to a different set within a static set of data, t…
This Micro Tutorial will demonstrate on a Mac how to change the sort order for chart legend values and decrpyt the intimidating chart menu.

911 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

20 Experts available now in Live!

Get 1:1 Help Now