IndexSuche in VBA

Moin moin,

ich hab zwar eine funktionierende Suche welche mit Datein im Verzeichnis findet -->

Private Sub CommandButton1\_Click()
 Dim dat As String
 Dim prog As String
 Dim i As Integer
 Dim ant As String

 prog = TextBox1
 With Application.FileSearch
 .NewSearch
 .LookIn = "d:\test1\"
 .SearchSubFolders = True
 .Filename = prog
 .MatchTextExactly = False
 End With

 With Application.FileSearch
 If .Execute() \> 0 Then
 For i = 1 To .FoundFiles.Count
 TextBox2 = .FoundFiles(i)
 Next i
 Else
 ant1 = MsgBox("Es wurden keine entsprechende Datei gefunden!", vbOK)
 End If
 End With
End Sub

Was ich aber benötigen täte, wäre das er mit Datei-Inhalte also ne Indexsuche durchführt, die Ergebniss (Datei mit Speichepfad) in ne Listbox schreibt (nicht wie oben in eine Textbox)- da es mehrere Dateien sein können in welchen der Suchbegriff beinhaltet ist, und die Such-Ergebnisse (also die Pfad und Dateiangabe) sich per Doppelklick öffnen lässt.
Ich hab schon gegoogelt - nichts brauchbares konnt ich finden :frowning:

Hat jemand ne Idee wie ich das verwirklichen könnte?
Vor allen die Indexsuche bring ich ned hin, zumindest nicht ohne eurer Hilfe…das andere dann schaff ich - hoffe ich - allein.

Gruß Rolf

Servus Drambeldier,

klar - ListBox1.AddItem .FoundFiles(i)
Einfachste Übung :smile:)

Danke schon mal für den „Wink“

Gruß Rolf

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Moin Rolf,

ich hab zwar eine funktionierende Suche welche mit Datein im
Verzeichnis findet -->

benutze bitte Option Explicit, dann passiert dir nicht der „Fehler“ mit „ant1“

Option Explicit
'
Private Sub CommandButton1\_Click()
Dim prog As String, i As Integer
prog = "\*.xls"
With Application.FileSearch
 .NewSearch
 .LookIn = "c:\test"
 .SearchSubFolders = True
 .Filename = prog
 .MatchTextExactly = False
 ListBox1.Clear
 If .Execute() \> 0 Then
 For i = 1 To .FoundFiles.Count
 ListBox1.AddItem .FoundFiles(i)
 Next i
 Else
 MsgBox "Es wurden keine entsprechende Datei gefunden!"
 End If
End With
End Sub

Und da wir nicht wissen was in Textbox 1 steht, definiere prog direkt im Code.

Was ich aber benötigen täte, wäre das er mit Datei-Inhalte
also ne Indexsuche durchführt, die Ergebniss (Datei mit
Speichepfad) in ne Listbox schreibt (nicht wie oben in eine
Textbox)- da es mehrere Dateien sein können in welchen der
Suchbegriff beinhaltet ist, und die Such-Ergebnisse (also die
Pfad und Dateiangabe) sich per Doppelklick öffnen lässt.

Zum Doppelklick brauchste aber noch dieses:

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
End Sub

Der obige Code listet in der Listbox alle Dateien des Verzeichnisses auf, die dem Suchfilter in Prog entsprechen.

Du willst noch vor der Auflistung in jeder Datei nach einem Suchbegriff suchen? Ich habe das mit der Index-Erstellung nicht wirklich verstanden.

Gruß
Reinhard

Moin Reinhard,

in prog = Textbox1 gebe ich den Suchbegriff ein, welcher in einer *.txt-Datei drinsteht.

Praktisch wie in der Windows-Suche - „Ein Wort oder Begriff innerhalb der Datei“

Die Ordner in denen die Datei steckt soll er mir in der Listbox anzeigen. Und dann eben per Doppelklick den Ordner öffnen.

Der gesuchte Begriff/Inhalt kann sich in meherern Dateien befinden, deshalb auch die List-Auflistung.

Wie öffne ich einen Ordner per Doppelklick? Ich habe

Application.Open ListBox1.text

aber da kommt Fehler --> Bezug ungültig.

Gruß Rolf

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Rolf,

in prog = Textbox1 gebe ich den
Suchbegriff ein, welcher in einer *.txt-Datei drinsteht.

du hast mich falsch verstanden, zum Nachstellen von Code ist es immer gut Fremdeinflüße möglichst abzustellen.
Wer weiß was in Textbox1 steht? Ein Leerzeichen zuviel, etwas falsch geschriebenes…
mit
prog=„abc“ ist der mögliche Fremdeinfluß unterbunden.

Praktisch wie in der Windows-Suche - „Ein Wort oder Begriff
innerhalb der Datei“

Dann ist diese Zuweisung aber was anderes:

.Filename = prog

Die Ordner in denen die Datei steckt soll er mir in der
Listbox anzeigen. Und dann eben per Doppelklick den Ordner
öffnen.

Was willst du nun, eine Liste der Dateien samt Ordnerpfad oder eine Liste der Ordner?

Der gesuchte Begriff/Inhalt kann sich in meherern Dateien
befinden, deshalb auch die List-Auflistung.
Wie öffne ich einen Ordner per Doppelklick? Ich habe

Sicher, da steht „ordner“, ich frage trotzdem nach, meinst du das
„C:\Test“
oder das
„C:\Test\Datei.txt“
zum Öffnen?

Meinst du so:

Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Workbooks.Open ListBox1.List(ListBox1.ListIndex)
End Sub

Gruß
Reinhard

Hi Rolf,

in prog = Textbox1 gebe ich den
Suchbegriff ein, welcher in einer *.txt-Datei drinsteht.

du hast mich falsch verstanden, zum Nachstellen von Code ist
es immer gut Fremdeinflüße möglichst abzustellen.
Wer weiß was in Textbox1 steht? Ein Leerzeichen zuviel, etwas
falsch geschriebenes…
mit
prog=„abc“ ist der mögliche Fremdeinfluß unterbunden.

–> Ja, da hast du recht. Ich muss hier noch ne Dummy-Suche anbringen. Zumeist wird nämlich nach Nummern gesucht.


Praktisch wie in der Windows-Suche - „Ein Wort oder Begriff
innerhalb der Datei“

Dann ist diese Zuweisung aber was anderes:

.Filename = prog

Die Ordner in denen die Datei steckt soll er mir in der
Listbox anzeigen. Und dann eben per Doppelklick den Ordner
öffnen.

Was willst du nun, eine Liste der Dateien samt Ordnerpfad oder
eine Liste der Ordner?

–> Das „Suchergebnis“ befindet sich in einer Datei (*.txt), deshalb soll mir der Pfad bis zu dem Ordner in welchen die Text-Datei ist, in der Listbox anzeigen. Und dann eben -->

Der gesuchte Begriff/Inhalt kann sich in mehreren Dateien
befinden, deshalb auch die List-Auflistung.
Wie öffne ich einen Ordner per Doppelklick? Ich habe

Sicher, da steht „ordner“, ich frage trotzdem nach, meinst du
das

das hab ich gemeint -->

„C:\Test“

Das eben nicht -->

oder das
„C:\Test\Datei.txt“
zum Öffnen?

Meinst du so:

Private Sub ListBox1_DblClick(ByVal Cancel As
MSForms.ReturnBoolean)
Workbooks.Open ListBox1.List(ListBox1.ListIndex)
End Sub

Ja - genau, also so in etwa :smile:
Eben den Datei-Ordner soll er mir öffnen.

Gruß Rolf

Gruß
Reinhard

Servus Reinhard,

habs nun mit Shell „Explorer.exe“ & ListBox1, vbNormalFocus
versucht - aba das sagt er das der Pfad nicht gefunden werden kann. Liegt wohl daran, das er die Datei als Ordner nicht öffnen kann…denk ich mir mal.

Gruß Rolf

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Rolf,

in prog = Textbox1 gebe ich den
Suchbegriff ein, welcher in einer *.txt-Datei drinsteht.

und wie hüpft der in die Textbox?

–> Ja, da hast du recht. Ich muss hier noch ne Dummy-Suche
anbringen. Zumeist wird nämlich nach Nummern gesucht.

Eine TextBox kennt Text, keine Nummern.

Die Ordner in denen die Datei steckt soll er mir in der
Listbox anzeigen. Und dann eben per Doppelklick den Ordner
öffnen.

das hab ich gemeint -->

„C:\Test“

Was stellst du dir unter Ordner „öffnen“ vor, Ordner öffnen ist sowas:

http://www.aspheute.com/artikel/20011016.htm

Natürlich könnte man auch die entsprechenden Dateien mit auflisten lassen, aber dann wären wir doch wieder da daß du eine Datei und keinen Ordner öffnest.

Natürlich kann man bei dem ganzen auch mit filesystemobject und getfolder() vorgehen, aber das ist ja VB und kein VBA *schwerlüch*, da gibts hier bessere Leute dafür *nichtlüch*.

Private Sub ListBox1_DblClick(ByVal Cancel As
MSForms.ReturnBoolean)
Workbooks.Open ListBox1.List(ListBox1.ListIndex)
End Sub

Ja - genau, also so in etwa :smile:
Eben den Datei-Ordner soll er mir öffnen.

Vom Öffnen des Ordners hast du doch nix *glaub*

Gruß
Reinhard

Hi Rolf,

habs nun mit Shell „Explorer.exe“ & ListBox1, vbNormalFocus
versucht - aba das sagt er das der Pfad nicht gefunden werden
kann.

da fehlt ein Leerzeichen, versuch’s mal so:

Shell "Explorer.exe " & ListBox1, vbNormalFocus

Gruß Rainer

habs nun mit Shell „Explorer.exe“ & ListBox1, vbNormalFocus
versucht - aba das sagt er das der Pfad nicht gefunden werden
kann. Liegt wohl daran, das er die Datei als Ordner nicht
öffnen kann…denk ich mir mal.

Hallo Rolf,

die Syntax ist anders.

Mal was anderes, gib mal bei Start–Ausführen ein

explorer.exe „C:\test“

Und nu, nun siehst du den Inhalt von c:\test, du siehst aber nicht welche Dateien den Inhalt „xyz“ haben nach dem du ja anfangs suchen wolltest.

Langsam gehen mir die Worte aus :smile:

Gruß
Reinhard

-) Sorry, das wollt ich ned :smile:

es ist so das ich ein Verzeichnis habe, in diesem befinden sich einige hundert Ordner - in dem sind jeweils 5 Files. Eine diese 5 Files ist eine Textdatei. In diese Textdatei befindet sich eine Nummer und nach genau der soll gesucht werden - wenn er die dann findet soll er mir den Pfad in der Listbox1 anzeigen und dann per Doppelklick den Ordner öffnen in dem die 5 Files sind.
Hoffe das war versändlich. :smile:))

Gruß Rolf

Hallo Rolf,

die Syntax ist anders.

Mal was anderes, gib mal bei Start–Ausführen ein

explorer.exe „C:\test“

Und nu, nun siehst du den Inhalt von c:\test, du siehst aber
nicht welche Dateien den Inhalt „xyz“ haben nach dem du ja
anfangs suchen wolltest.

Langsam gehen mir die Worte aus :smile:

Gruß
Reinhard

Servus Rainer,

stimmt - das hilft schon n Stück. Danke dir. Wobei er mit den Ordner öffnen soll in dem die angezeigte Datei sich befindet…

-)

Gruß Rolf

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Rolf,

das hilft schon n Stück. Danke dir. Wobei er mit den
Ordner öffnen soll in dem die angezeigte Datei sich
befindet…

was steht denn exakt in der Zeile der ‚Listbox1‘?

Wenn das steht: ‚C:\Programme‘ wird der Ordner Programme geöffnet.

Steht da: ‚C:\Programme\Test.txt‘ kannst Du ‚\Test.txt‘ abschneiden, InstrRev() kennst Du? Etwa:
Left(Listbox1.List(ListBox1.ListIndex), InStrRev(Listbox1.List(ListBox1.ListIndex), „“) - 1)

Gruß Rainer

Servus,

puh - nö sorry InstrRev() hör ich zum ersten Mal. Sorry.
Hab ich noch nie gemacht.

Werd ich mal versuchen müssen.
Danke dir.

Gruß Rolf

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Rolf,

es ist so das ich ein Verzeichnis habe, in diesem befinden
sich einige hundert Ordner - in dem sind jeweils 5 Files. Eine
diese 5 Files ist eine Textdatei. In diese Textdatei befindet
sich eine Nummer und nach genau der soll gesucht werden -
wenn er die dann findet soll er mir den Pfad in der Listbox1
anzeigen und dann per Doppelklick den Ordner öffnen in dem die
5 Files sind.
Hoffe das war versändlich. :smile:))

wäre das schon mal was in der richtigen Richtung?

Private Sub CommandButton1\_Click()
Dim strSuchzahl As String, lngFound As Long
strSuchzahl = "123"
With Application.FileSearch
 .NewSearch
 .LookIn = "c:\test"
 .SearchSubFolders = True
 .Filename = "\*.txt"
 .TextOrProperty = strSuchzahl
 .MatchTextExactly = True
 ListBox1.Clear
 If .Execute() \> 0 Then
 For lngFound = 1 To .FoundFiles.Count
 ListBox1.AddItem Left(.FoundFiles(lngFound), InStrRev(.FoundFiles(lngFound), "\") - 1)
 Next lngFound
 Else
 ListBox1.AddItem "Nix gefunden"
 End If
End With
End Sub

Gruß
Reinhard

Oha, Super - Danke!
Genau so. Danke

Gruß Rolf

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]