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