Recursief programmeren in VBA

Recursief programmeren in VBA
In dit voorbeeld wordt met recursief programmeren in VBA een overzicht in Excel gegenereerd met alle bestandsnamen uit de geselecteerde hoofdmap. De mappen, submappen en bestandsnamen worden tevens hiërarchisch weergegeven.

Recursief staat voor zichzelf herhalend. In deze context betekent dat de functie Recursief telkens opnieuw wordt aangeroepen.

PSD recursief programmeren in VBADe functie Recursief wordt initieel aangeroepen vanuit de procedure Start nadat de gebruiker de gewenste hoofdmap heeft geselecteerd.

In de rechter afbeelding (PSD) is te zien hoe de functie Recursief werkt. In deze functie bevindt zich als eerste een [For-each loop]. Binnen deze loop zal als eerste de naam van de map – [Naam map] – worden afgedrukt. De volgende stap is om opnieuw de functie Recursief aan te roepen om te kijken of deze map een supmap heeft, [Submap?]. Wanneer er geen submappen meer zijn wordt de bestandsnaam – [Naam bestand] – afgedrukt en gekeken of er nog meer bestanden zijn, [Nog een bestand?]. Dit laatste gebeurd wederom met een [For-each loop].

Download hier de toepassing.

'-----------------------------------------------------------------------------------------------------------------------
' Auteur        : pascalterheege.nl
' Datum         : 6-10-2016
' Object        : modRecursief
' Doel          : alle bestandsnamen uit map uitlezen inclusief submappen
' Opmerking     : FileSystemObject: late binding
'-----------------------------------------------------------------------------------------------------------------------

Option Explicit

Dim r As Long   'rij
Dim k As Long   'kolom

Sub Start()

'   Hoofdmap selecteren m.b.v. ingebouwde dialoogvenster

    Dim objFSO As Object
    Dim objHoofdMap As Object
    Dim fdVenster As FileDialog
    
    Set fdVenster = Application.FileDialog(msoFileDialogFolderPicker)
    
    fdVenster.Show
    
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objHoofdMap = objFSO.GetFolder(fdVenster.SelectedItems(1))
    
    Recursief objHoofdMap

End Sub

Sub Recursief(objHoofdMap As Object)

'   Itereren door alle mappen, submappen en bestanden en
'   in dezelfde hierarchie in Excel plaatsen

    Dim objSubMap As Object
    Dim objBestand As Object
    
    r = r + 1

    For Each objSubMap In objHoofdMap.SubFolders
    
        k = k + 1
    
        Cells(r, k) = objSubMap.Name
        
        Recursief objSubMap
        
        k = k + 1
        
        If r = 1 Then r = k

        For Each objBestand In objSubMap.Files
    
            Cells(r, k) = objBestand.Name
            r = r + 1
            
        Next
        
        k = k - 2
    
    Next

End Sub

“Here are the 2 Rules of Miyagi-Ryu Karate. Rule Number 1: ‘Karate for defense only.’ Rule Number 2: ‘First learn rule number 1.’” :)
Mr. Miyagi