romuald
Goto Top

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

Content-Key: 463185

Url: https://administrator.de/contentid/463185

Ausgedruckt am: 28.03.2024 um 14:03 Uhr

Mitglied: emeriks
emeriks 17.06.2019, aktualisiert am 20.06.2019 um 12:47:34 Uhr
Goto Top
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.

searchPath & strNo & searchLocation
ergibt mit strNo = "4028603600"
 "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.
Mitglied: Romuald
Romuald 20.06.2019 um 06:02:57 Uhr
Goto Top
Hallo,

das ist schon richtig so. Es ist der original String, den der Explorer liefert, wenn nach 4028603600 gesucht wird. Habe hier nur den Suchwert als STRING definiert.

Grüße

Romuald
Mitglied: colinardo
colinardo 21.06.2019 aktualisiert um 14:01:04 Uhr
Goto Top
Servus,
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:
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
Grüße Uwe
Mitglied: Romuald
Romuald 22.06.2019 um 03:42:24 Uhr
Goto Top
Hi Uwe,

das wäre ja zu einfach.... Der Suchstring müsste ja dann im Dateinamen drin sein. Was ich brauche geht etwas tiefer.

In einer Datei kann auf Seite 17 von 300 der Suchstring sein. Also brauche ich nur die Seite 17 und nicht das ganze Dokument.

Grüße

Romuald
Mitglied: colinardo
colinardo 22.06.2019 aktualisiert um 07:29:52 Uhr
Goto Top
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 ...
Mitglied: colinardo
colinardo 24.06.2019 aktualisiert um 11:21:46 Uhr
Goto Top
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.
' 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
Ä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
Mitglied: Romuald
Romuald 24.06.2019 um 19:32:15 Uhr
Goto Top
Hi,

danke. Ich denke mein Problem ist dadurch lösbar.

Grüße

Romuald