Excel, Dateien anhand Nummern oder Namen suchen

  • Excel

Es gibt 29 Antworten in diesem Thema. Der letzte Beitrag () ist von Mr Unklar.

    Excel, Dateien anhand Nummern oder Namen suchen

    Hallo zusammen und erstmal ein Frohes neues Jahr,

    ich bräuchte bei der Umsetzung dieser Suche hilfe.

    Ich möchte gerne mit meiner userForm (siehe Bild im Anhang) nach Dateinamen oder Nummern suchen. Die Nummern und Dateinamen sind immer Variabel.

    Es soll in einem bestimmten Ordner nach den Dateien gesucht werden. Macht es hier einen Unterschied wenn dieser noch Unterordner beinhaltet?

    Der Aufbau der Dateinamen sieht wie folgt aus: PP 8.2.4-5-13 Name (68900 68901 68905 68902).xlsm

    Das heißt wenn ich eine von den Zahlen in der Klammer eingebe, soll mir die Datei angezeigt werden. Dasselbe gilt für die Eingabe des Namen.

    Ist es möglich mir die Vorschläge die gefunden wurden in einem Fenster zb. als Liste anzuzeigen damit ich das richtige auswählen kann und die Datei sich mit einem Doppelklick dann öffnet?


    Als Info noch, meine VBA Kenntnisse sind noch bei den Basics :)

    Vielen Dank für eure Tipps und Hilfe

    Edit:
    Hier mal mein bisheriger Code:

    Quellcode

    1. 'Hauptfenster ausrichten
    2. Option Explicit
    3. Sub UserForm_Activate()
    4. 'Ausrichtung Fenster
    5. Me.Height = Application.Height
    6. Me.Width = Application.Width
    7. Me.Left = Application.Left
    8. Me.Top = Application.Top
    9. 'Ausrichtung von Frame Bildschirmmittig
    10. Me.Frame1.Left = (Me.Width / 2) - (Me.Frame1.Width / 2)
    11. Me.Frame1.Top = (Me.Height / 2) - (Me.Frame1.Height / 2)
    12. 'Me.ListBox1.Top = (Me.Height / 2) - (Me.ListBox1.Height / 2)
    13. End Sub
    14. Sub CommandButton2_Click()
    15. ThisWorkbook.Close
    16. End Sub
    17. Sub suchen()
    18. Dim Dateiname As String
    19. Dim Pfad As String
    20. Dim Suchbegriff
    21. Pfad = "C:\Users\...\"
    22. Suchbegriff = Suchmaske.TextBox1.Value
    23. If IsNumber(Suchbegriff) Then
    24. Else
    25. End If
    26. Dateiname = Dir(Pfad & "*" & "*.xlsm")
    27. If Dateiname <> "" Then
    28. Workbooks.Open Pfad & Dateiname
    29. End If
    30. End Sub
    Bilder
    • oberfläche.JPG

      281,01 kB, 1.128×679, 73 mal angesehen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Mr Unklar“ ()

    Zeile 36 bis 42 sind überflüssig.

    Für Zeilen 44 bis 49 kannst Du einen Loop verwenden.

    Visual Basic-Quellcode

    1. Dateiname = Dir(Pfad & "*" & "*.xlsm")
    2. Do until Dir= ""
    3. 'Hier die Daten in Deine Listbox schreiben
    4. Dir
    5. Loop
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „INOPIAE“ ()

    Habe das jetzt so eingefügt. Was mir gerade nicht einfallen will, wie ich den Suchbegriff in meinem Pfad dann suchen kann?
    Und wie sieht das aus wegen den Zahlen muss ich die nicht separat suchen lassen je nachdem ob Integerwerte angegeben sind oder ein String?

    Visual Basic-Quellcode

    1. Dim Dateiname As String
    2. Dim Pfad As String
    3. Dim Suchbegriff
    4. Pfad = "C:\Users\...\"
    5. Suchbegriff = Suchmaske.TextBox1.Value
    6. Dateiname = Dir(Pfad & "*" & "*.xlsm")
    7. Do Until Dir = ""
    8. Dir ListBox1.AddItem
    9. If Dateiname <> "" Then
    10. Workbooks.Open Pfad & Dateiname
    11. End If
    12. Loop


    Habe den Code noch im Internet gefunden gehabt um auch Unterordner zu durchsuchen. Brauche ich das auch noch?

    Visual Basic-Quellcode

    1. With Application.FileSearch
    2. .Filename = Suchbegriff & "*.xlsm"
    3. .LockIn = Pfad
    4. .SearchSubFolders = True

    Mr Unklar schrieb:

    Dateiname = Dir(Pfad & "*" & "*.xlsm")

    Na ja

    Visual Basic-Quellcode

    1. Dateiname = Dir(Pfad & "*" & Suchbegriff & "*.xlsm"
    2. Do Until Dateiname = ""
    3. ListBox1.AddItem Dateiname
    4. Dateiname = Dir
    5. Loop
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    So habe ich das jetzt übernommen. Muss ich jetzt noch angeben das auch Unterordner durchsucht werden?

    Wie sieht es damit aus wenn man nur nach der Nummer sucht ?

    Sorry wenn ich blöd Frage, aber VBA ist für mich noch neu und kenne mich nicht so damit aus.

    Visual Basic-Quellcode

    1. Dim Dateiname As String
    2. Dim Pfad As String
    3. Dim Suchbegriff
    4. Pfad = "C:\Users\...\"
    5. Suchbegriff = Suchmaske.TextBox1.Value
    6. Dateiname = Dir(Pfad & "*" & Suchbegriff & "*.xlsm")
    7. Do Until Dateiname = ""
    8. ListBox1.AddItem Dateiname
    9. Dateiname = Dir
    10. Loop

    Erkläre mal bitte mit Deinen Worten, was diese Codezeile macht.

    Mr Unklar schrieb:

    Dateiname = Dir(Pfad & "*" & Suchbegriff & "*.xlsm")


    Das mit den Unterordnern ist mit dem Dir-Befehl nur rekursiv lösbar.
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Es wird unter dem angegebenen Pfad nach Dateien die den Typ .xlsm haben gesucht. Mit * wird angegeben das egal was vorne oder dahinter steht trotzdem bei gleichem Namen es angezeigt wird. Und das Ergebnis wird unter der Variable Dateiname dann gespeichert bis es überschrieben wird.
    Habe meinen Fehler gefunden. Sollte vielleicht mal meinen CommandButton1_Click() auch verknüpfen.

    Wie kann ich jetzt noch meinen ListBox-Eintrag mit doppelklick drauf öffnen lassen?

    Müsste ja so wie hier in dem Beitrag #3 funktionieren.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Mr Unklar“ ()

    Müsste doch so dann sein:

    Visual Basic-Quellcode

    1. Workbooks.Open Me.ListBox1.List(Me.ListBox1.ListIndex)


    Habe gemerkt, dass er sich so aber den Pfad in dem er die Datei gefunden hat nicht merkt.
    Wie kann ich den Pfad in dem die Datei gefunden wurde noch hinterlegen?



    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Mr Unklar“ ()

    Kann ich mir den Dateipfad auch irgendwie in der ListBox ausblenden lassen so das er nicht direkt dahinter steht?

    Jetzt fehlt noch das ich die ausgewählte Datei dann öffnen kann.
    Habe das in eine extra Prozedur, wobei hier ja das Problem ist, das er den Pfad wenn er aus dem Loop rausgeht nicht mehr hinterlegt ist. Er speichert mir den Pfad ja nur so lange er noch in dieser Prozedur ist.

    Visual Basic-Quellcode

    1. Sub CommandButton1_Click()
    2. Dim Dateiname As String
    3. Dim Suchbegriff
    4. Pfad = "C:\Users\...\Service\"
    5. 'Sucht nach Eingabe einer Nummernfolge oder Text
    6. Suchbegriff = Suchmaske.TextBox1.Value
    7. Dateiname = Dir(Pfad & "*" & Suchbegriff & "*.xlsm")
    8. Do Until Dateiname = ""
    9. ListBox1.AddItem Dateiname & Pfad
    10. Dateiname = Dir
    11. Loop
    12. End Sub
    13. Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    14. Workbooks.Open Pfad & ListBox1.Text
    15. End Sub
    Hast Du am Anfang Deines Codes (1. Zeile) Option Explict stehen?
    Wo deklariest Du denn die Variable Pfad?

    So wie der Code aus sieht sollte in Zeile 15 dies stehen:

    Visual Basic-Quellcode

    1. ​ListBox1.AddItem Dateiname
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).
    Option Explict gehört in die erste Zeile. Alles andere kommt darunter.

    Im ListBox1_DblClick sollte dies stehen.

    Visual Basic-Quellcode

    1. ​Workbooks.Open Pfad & Me.ListBox1.List(Me.ListBox1.ListIndex)
    NB. Es ist doch schön, wenn man lesbare Namen vergibt. Siehe auch [VB.NET] Beispiele für guten und schlechten Code (Stil).

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „INOPIAE“ ()

    Funktioniert leider nicht so, ich bekomme den Fehler das er die Datei nicht finden kann.

    Hier mal der komplette Code.

    Visual Basic-Quellcode

    1. Option Explicit
    2. Dim Pfad As String
    3. Sub UserForm_Activate()
    4. 'Ausrichtung Fenster
    5. Me.Height = Application.Height
    6. Me.Width = Application.Width
    7. Me.Left = Application.Left
    8. Me.Top = Application.Top
    9. 'Ausrichtung von Frame in Bildschirmmitte
    10. Me.Frame1.Left = (Me.Width / 2) - (Me.Frame1.Width / 2)
    11. Me.Frame1.Top = (Me.Height / 2) - (Me.Frame1.Height / 2)
    12. End Sub
    13. Sub CommandButton1_Click()
    14. Dim Dateiname As String
    15. Dim Suchbegriff
    16. Pfad = "C:\Users\...\Service\"
    17. 'Sucht nach Eingabe einer Nummernfolge oder Text
    18. Suchbegriff = Suchmaske.TextBox1.Value
    19. Dateiname = Dir(Pfad & "*" & Suchbegriff & "*.xlsm")
    20. Do Until Dateiname = ""
    21. ListBox1.AddItem Dateiname
    22. Dateiname = Dir
    23. Loop
    24. End Sub
    25. Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    26. Workbooks.Open ListBox1.Text
    27. End Sub
    28. Sub CommandButton2_Click()
    29. ThisWorkbook.Close
    30. End Sub