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.
De 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