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!