Suchen in Dateien / Zugreifen auf den Windows SearchIndex mit VBA
Ich hatte neulich die Anforderung, von einer Access-Anwendung eine Volltextsuche innerhalb von Dateien auf dem Dateisystem durchzuführen.
Also etwa: Liste mir alle Office- und PDF-Dateien unterhalb eines bestimmten Ordners auf, die das Wort „Software“ enthalten.
Erstaunlichrweise musste ich sehr lange suchen, bis ich den einfachsten Weg gefunden habe:
Via ADO und SQL den Index der Windows-Suche abfragen
Sub windows_search()
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim strCNN As String
Dim strSQL As String
Set cnn = New ADODB.Connection
Set rst = New ADODB.Recordset
' Connection String
strCNN = "Provider=Search.CollatorDSO;Extended Properties='Application=Windows';"
cnn.Open strCNN
' SQL String: Volltext-Suche unterhalb eines Ordners nach Dateien, die "software" enthalten
strSQL = "SELECT System.ItemPathDisplay FROM SYSTEMINDEX WHERE CONTAINS(*,'software') and scope = 'c:\Projekte'"
Set rst = cnn.Execute(strSQL)
While Not rst.EOF
Debug.Print rst.Fields.Item("System.ItemPathDisplay").Value
rst.MoveNext
Wend
rst.Close
Set rst = Nothing
cnn.Close
Set cnn = Nothing
End Sub
Erläuterung:
Es werden exakt die gleichen Dateien gefunden, wie wenn im Windows-Explorer der Ordner c:\Projekte ausgewählt wird und im Suchfenster „software“ eingegeben wird.

Vorraussetzung: Ordner muss bei den „Indizierten Orten“ enthalten sein!
Im abgebildeten Such-Ribbon, unter „Erweiterte Optionen“ -> „Indizierte Orte ändern“ muss der zu durchsuchende Ordner aufgeführt sein bzw. hinzugefügt werden.
Unter diesem Menupunkt sind auch die Dateitypen aufgeführt, die bei der Volltext-Suche gefunden bzw. durchsucht werden können.
Der gleiche Dialog kann auch schnell aufgerufen werden, wenn im Windows-Start-Fenster „Indizierungsoptionen“ eingegeben wird.
Weiterführende Links:
Unter diesen Links sind mehr Informationen zu finden, welche Felder angezeigt werden können und welche Filter-Parameter möglich sind:
https://msdn.microsoft.com/en-us/library/windows/desktop/bb266517(v=vs.85).aspx
https://msdn.microsoft.com/en-us/library/windows/desktop/bb760770(v=vs.85).aspx