VBA - Über, in explorer.exe (Suchfunktion) gefundene Einträge drucken
Hallo zusammen,
ich würde gerne gefundene Dateien über eine VBA-Funktion drucken. Hierbei habe ich das Problem, dass ich mich nicht auf ein fixes Verzeichnis beziehen kann.
Shell liefert mir leider keinen Rückwert.
Hier mal der Ansatz:
Private Sub sf_Search_Click()
DescVar = Me.Name & "- sf_Search_Click"
On Error GoTo Err1
Dim strNo As String
Dim searchPath As String
Dim searchLocation As String
'Bsp:
strNo = "4028603600"
searchPath = "search-ms:displayname=Suchergebnisse%20in%20'Temp'&crumb=BeliebigeganzeZahl%3A%3D" & strNo & "%20ODER%20System.Generic.String%3A"
searchLocation = "&crumb=location:C%3A%5CUsers%5Cinfo%5CDownloads%5CTemp"
If Not strNo = "" Then
Call Shell("explorer.exe """ & searchPath & strNo & searchLocation & "", 1)
End If
Exit_err1:
Exit Sub
Err1:
MsgBox Err.Description
ErrInsert Err.Number, Err.Description, DescVar
Resume Exit_err1
End Sub
Würde mich freuen, wenn jemand von euch mir ein wenig Input geben könnte.
Grüße
Romuald
ich würde gerne gefundene Dateien über eine VBA-Funktion drucken. Hierbei habe ich das Problem, dass ich mich nicht auf ein fixes Verzeichnis beziehen kann.
Shell liefert mir leider keinen Rückwert.
Hier mal der Ansatz:
Private Sub sf_Search_Click()
DescVar = Me.Name & "- sf_Search_Click"
On Error GoTo Err1
Dim strNo As String
Dim searchPath As String
Dim searchLocation As String
'Bsp:
strNo = "4028603600"
searchPath = "search-ms:displayname=Suchergebnisse%20in%20'Temp'&crumb=BeliebigeganzeZahl%3A%3D" & strNo & "%20ODER%20System.Generic.String%3A"
searchLocation = "&crumb=location:C%3A%5CUsers%5Cinfo%5CDownloads%5CTemp"
If Not strNo = "" Then
Call Shell("explorer.exe """ & searchPath & strNo & searchLocation & "", 1)
End If
Exit_err1:
Exit Sub
Err1:
MsgBox Err.Description
ErrInsert Err.Number, Err.Description, DescVar
Resume Exit_err1
End Sub
Würde mich freuen, wenn jemand von euch mir ein wenig Input geben könnte.
Grüße
Romuald
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 463185
Url: https://administrator.de/forum/vba-ueber-in-explorer-exe-suchfunktion-gefundene-eintraege-drucken-463185.html
Ausgedruckt am: 22.12.2024 um 11:12 Uhr
7 Kommentare
Neuester Kommentar
Hi,
zunächst: Nutze doch bitte Code Tags zum Posten von Codezeilen!
Ist es Absicht, dass Du "strNo" 2x erstetzt bzw. darüber verkettest?
Enmal erscheint es im "searchPath = ....." und dann nocheinmal in "Call Shell("explorer.exe ....."
Ausserdem ist dann das "crumb" mehrfach in der Kommandozeile.
ergibt mit strNo = "4028603600"
E.
zunächst: Nutze doch bitte Code Tags zum Posten von Codezeilen!
Ist es Absicht, dass Du "strNo" 2x erstetzt bzw. darüber verkettest?
Enmal erscheint es im "searchPath = ....." und dann nocheinmal in "Call Shell("explorer.exe ....."
Ausserdem ist dann das "crumb" mehrfach in der Kommandozeile.
searchPath & strNo & searchLocation
"search-ms:displayname=Suchergebnisse%20in%20'Temp'&crumb=BeliebigeganzeZahl%3A%3D4028603600%20ODER%20System.Generic.String%3A4028603600&crumb=location:C%3A%5CUsers%5Cinfo%5CDownloads%5CTemp"
E.
Servus,
Grüße Uwe
ich würde gerne gefundene Dateien über eine VBA-Funktion drucken
Hierbei habe ich das Problem, dass ich mich nicht auf ein fixes Verzeichnis beziehen kann.
dann mach es halt übers FileSystemObject ohne Explorer-Gedöns:Hierbei habe ich das Problem, dass ich mich nicht auf ein fixes Verzeichnis beziehen kann.
Dim strFolder, strSearchTerm, f, fso, objShell
strFolder = "D:\Verzeichnis"
strSearchTerm = "4028603600"
Set fso = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("Shell.Application")
For Each f In fso.GetFolder(strFolder).Files
If InStr(1,f.Name,strSearchTerm,vbTextCompare) > 0 Then
objShell.ShellExecute f.Path,"","","Print"
End If
Next
Das wäre auch kein großes Problem, die Suche im Index ist gut dokumentiert und über ADO ansprechbar
https://docs.microsoft.com/de-de/windows/desktop/search/-search-sample-w ...
https://docs.microsoft.com/de-de/windows/desktop/search/-search-sample-w ...
Falls du mit meinem Hinweis oben nicht weiter kommst hier ein einfaches Beispiel um mit der Windows Suche einen Ordner nicht rekursiv (wie du oben wolltest) beschränkt auf .txt Dateien nach einem Begriff zu durchsuchen und die gefundenen Dateien sofort auszudrucken:
Wenn man Rekursion wünscht tauscht man in der SQL Query das "DIRECTORY" durch "SCOPE" aus.
Ärgenzend noch hilfreiche Links zur Formulierungssyntax bei Windows Search Queries mit SQL
Abfragebare und filterbare Spalten der Tabelle SystemIndex
Hope this helps
Grüße Uwe
Wenn man Rekursion wünscht tauscht man in der SQL Query das "DIRECTORY" durch "SCOPE" aus.
' Pfad und Suchbegriff abfragen
strSearchPath = InputBox("Suchpfad eingeben (nicht rekursiv):","Suchpfad","C:\Windows")
strSearchTerm = InputBox("Suchbegriff eingeben:","Suchbegriff")
' Dateifilter definieren
strFileFilter = ".txt"
' Objekte erstellen
Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")
Set objShell = CreateObject("Shell.Application")
Set objFSO = CreateObject("Scripting.Filesystemobject")
' Backslashes durch Slashes ersetzen
strSearchPath = Replace(strSearchPath,"\","/",1,-1,vbTextCompare)
' Verbindung herstellen
objConnection.Open "Provider=Search.CollatorDSO;Extended Properties='Application=Windows';"
' Recordset abfragen
objRecordSet.Open "SELECT System.ItemNameDisplay, System.ItemPathDisplay, System.ItemTypeText FROM SystemIndex WHERE DIRECTORY='file:" & strSearchPath & "' AND System.ItemNameDisplay LIKE '%" & strFileFilter & "' AND CONTAINS('""" & strSearchTerm & """')", objConnection
' Wenn Einträge gefunden wurden
If Not objRecordset.EOF Then
objRecordSet.MoveFirst
Do Until objRecordset.EOF
' Voller Pfad
strFullName = objRecordset.Fields.Item("System.ItemPathDisplay")
' Datei drucken
objShell.ShellExecute strFullName,"","","Print"
'nächste passende Datei
objRecordset.MoveNext
Loop
Else
' keine passende Datei gefunden
MsgBox "Kein Ergebnis",vbExclamation
End If
' Recordset und Verbindung schließen
objRecordset.Close
objConnection.Close
'Cleanup
Set objRecordset = Nothing
Set objConnection = Nothing
Set objShell = Nothing
Set objFSO = Nothing
Abfragebare und filterbare Spalten der Tabelle SystemIndex
Hope this helps
Grüße Uwe