Met de onderstaande functie kun je heel snel een specifieke folder locatie inclusief alle sub folders doorzoeken om te kijken of een bestand met een bepaalde naam (of deel van naam) aanwezig is. Is dat bestand aanwezig dan is de output van deze functie de complete bestandsnaam plus het pad waar het bestand gevonden is.
Public bestandGevonden As String
Function Zoekbestand(Zoekfolder As String, Zoekwoord As String) As String
Dim SubFolder As Object
Dim FileSystem As Object
Dim File As Object
Dim folder As Object
Set FileSystem = CreateObject("Scripting.FileSystemObject")
Set folder = FileSystem.GetFolder(Zoekfolder)
For Each SubFolder In folder.SubFolders
Zoekfolder = SubFolder
Zoekbestand = Zoekbestand(Zoekfolder, Zoekwoord)
Next
If bestandGevonden = "ja" Then
Exit Function
End If
For Each File In folder.Files
If LCase(File.Name) Like "*" & LCase(Zoekwoord) & "*" Then
Zoekbestand = folder & "\" & File.Name
bestandGevonden = "ja"
Exit Function
End If
Next
If Zoekbestand = "" Then
Zoekbestand = "bestand niet gevonden in de betreffende folder"
End If
End Function
In de functiecode wordt binnen de For Each Sub folder loop de zoekfolder variabele weer gevuld met de Sub folder. Vervolgens wordt de functie binnen de functie nog een keer gestart. In deze aanroep komt hij een niveau dieper in de Sub folders terecht komt om de zoekactie uit te voeren. Zodra hij een bestand gevonden heeft geeft hij de waarde ‘ja’ mee aan de variabele ‘bestandGevonden’. Die variabele blokkeert verdere zoekacties in sub folders. Vergeet niet de ‘bestandGevonden’ variabele public te declareren. Anders verlies hij zijn waarde zodra hij in een volgende functie aanroep terecht komt.
De functie koppelt het eerst resultaat terug als output. Mochten er meerdere zoekresultaten zijn dan koppelt de functie he resultaat in de meest diep gelegen sub folder terug.
Je kunt de functie op de onderstaande manier aanroepen:
Sub test()
Dim bestand As String
bestand = Zoekbestand("C:\Website", "MacroExcel")
MsgBox bestand
End Sub
Mocht je vragen hebben? Een kleine aanpassing vereisen op deze functie? Of laten weten dat deze functie van pas komt ;). Laat het mij weten in de reacties!