VBA - Datei anhand von suchbegriffen suchen und öffnen

  • Excel

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Kai aus der Kiste.

    VBA - Datei anhand von suchbegriffen suchen und öffnen

    Hallo zusammen,

    ich hoffe ihr habt eine Idee wie ich bei meinem projekt vorankomme.

    Ich möchte das in einem Verzeichnis nach einem bestimmten Suchbegriff gesucht und die Datei geöffnet wird. Die Herausforderung dabei ist dass die Dateien immer mit einem Datum versehen werden wann diese erstellt wurde. also z.B.

    12-12-2016-Ref123456789-invoice.xls

    jetzt möchte ich gern in einer Userform den Suchbegriff in einer textbox eingeben und mit klick auf dem command button nach "123456789" suchen und die Datei soll sich öffnen.

    habt ihr eine Idee wie ich das Verwirklichen kann?

    Gruß Martin
    In VBA kann man mit der Dir-Funktion nach Dateien und Ordnern suchen.

    Visual Basic-Quellcode

    1. Sub suchen()
    2. Dim Dateinmame As String
    3. Dim Suchbegriff As String
    4. Dim Pfad As String
    5. Pfad = "C:\temp\"
    6. Suchbegriff = "123456789"
    7. Dateinmame = Dir(Pfad & "*" & Suchbegriff & "*.xls")
    8. If Dateinmame <> "" Then
    9. Workbooks.Open Pfad & Dateinmame
    10. End If
    11. End Sub
    Hallo,
    sorry dass ich das Thema noch mal aufgreifen muss.
    Bin neu und würde gerne wissen ob die oben genannte Lösung auch auf eine Ordnersuche angewendet werden kann.

    D.h. ich würde in einem gewissen Pfad gerne einen Ordner mit einer bestimmten Teilbenennung finden und etwas in diesem Ordner speichern.

    Beispiel: alle Ordner im Pfad xy/xy/xy enden auf eine 5stellige Zahl > Finde den Ordner der auf 12345 Endet und speichere mir meine Datei in diesem Ordner.

    Danke für die Hilfe !

    Visual Basic-Quellcode

    1. Dim FS As Object, RootFolder As Object, SubFolder As Object
    2. Set FS = CreateObject("Scripting.FileSystemObject")
    3. Set RootFolder = FS.GetFolder("c:\xy\xy\xy\")
    4. For Each SubFolder In RootFolder.SubFolders
    5. If SubFolder.Name Like "*12345" Then
    6. ' do whatever you want
    7. Exit For
    8. End If
    9. Next
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo,
    habe dazu ein frage :

    Stelle mich aber erst mal kurz vor, mein Name ist Kai und komme aus Frankfurt am Main und habe mir zur Aufgabe gemacht für meine Kumpel und bester Freund sein Leben in der Geschäftswelt etwas leichter zu machen. mit einer Verwaltungs Excel Programm.
    Dieses beinhaltet:
    Produkt Datenbank-Kunden Datenbank-Lieferanten Datenbank-einfache Kasse-Rechnungen/Angebote schreiben-Buchhaltung-Etiketten Druck.
    So nun zu meiner Frage:
    Kann man auch nach einem teil eines Dateinamens suchen und alle gefundene in einer ListBox anzeigen lassen.
    Beispiel
    in Ordner
    \Buchhaltung\Rechnung\
    220110_10001_1005_RE.pdf
    220202_10002_1006_RE.pdf
    220203_10003_1005_RE.pdf
    dabei alle mit der NR 1005 (KundenNr) in einer ListBox anzeigen; die ListBox ist in einem Tabellenblatt

    220110_10001_1005_RE.pdf = 220110 = Datum
    220110_10001_1005_RE.pdf = 10001 = RechnungsNummer
    220110_10001_1005_RE.pdf = 1005 = KundenNummer
    220110_10001_1005_RE.pdf = RE = Rechnung

    das gleiche benötige ich auch für vier Listboxen auf einem anderen Tabellenblatt wo dann aus dem Ordner
    \Buchhaltung\Rechnungen\ ' ist RE als ändung vor dem .pdf
    \Buchhaltung\Angebote\ ' ist AN als ändung vor dem .pdf
    \Buchhaltung\gutschrift\ ' ist GU als ändung vor dem .pdf

    ich bin ein Anfäger und brauche paar tritte in den Hintern :D

    Für eure Hilfe würde ich mich sehr freuen.

    LG
    Kai

    Kai aus der Kiste schrieb:

    Kann man auch nach einem teil eines Dateinamens suchen

    Visual Basic-Quellcode

    1. ​Dim FS As Object, Folder As Object, File As Object
    2. Set FS = CreateObject("Scripting.FileSystemObject")
    3. Set Folder = FS.GetFolder("c:\Buchhaltung\Rechnung\")
    4. For Each File In Folder.Files
    5. If File.Name Like "*1005_RE.pdf" Then
    6. MyListBox.Add File.Name
    7. End If
    8. Next
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo Petaod,

    erst mal herzlichen Dankfür die schnelle Hilfe werde ich mocgen gleich mal aus probieren.

    Aber wie mache ich es wenn ich die Zahl in der Mitte suche und aus geben muss ???
    220110_10001_1005_RE.pdf = 10001 = RechnungsNummer
    da sollen ja dann alle angezeit werden, so das die Letzte RE-Nr als oberstes steht.

    gibt es auch die möglichkeit dann aus der ListBox die zB die RE an zu klicken und sie öffnet sich dann in einem andere (Neue) Fenster ???

    Wenn ja dann würd ich mich sehr Freuen ...

    Danke

    Kai aus der Kiste schrieb:

    Aber wie mache ich es wenn ich die Zahl in der Mitte suche und aus geben muss ?

    Visual Basic-Quellcode

    1. Rechnungsnummer = Split(File.Name,"_")(1)


    Allerdings bewegst du dich mit deinen Fragen so langsam weit weg vom Original-Thread.
    Da wäre es besser gewesen, du hättest einen eigenen Beitrag eröffnet.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --