Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.04.2024 20:05:21
28.04.2024 18:33:31
28.04.2024 18:25:12
28.04.2024 14:18:05
Anzeige
Archiv - Navigation
1920to1924
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Daten in Ordner und Unterordner Suchen

Daten in Ordner und Unterordner Suchen
17.02.2023 18:17:55
Solmann
Hallo zusammen,
ich bin neu hier im Forum, habe aber schon den einen oder anderen guten Tipp aus dem Forum verwenden können.
Ich konnte bereits einige sehr einfache Sachen über Makro (VBA) lösen.
Nun habe eine Idee wie ich einen Arbeitsschritt in einer Fertigungslinie vereinfachen könnte und somit meinen Mitarbeitern etwas Arbeit ersparen.
Leider habe ich keine große Erfahrung mit der Programmierung in VBA und weiß auch nicht ob das überhaupt lösbar ist.
Nun zu meiner Idee:
Ich habe in einer Zelle (Exeldatei 1) folgende Bezeichnungen (Bezeichnungen ändert sich durch eingaben von Mitarbeitern) stehen: Bsp.: "000_BG00_123"
Nach klick auf einen Butten möchte ich in einem Ordner und den Unterordnern nach einer zugehörigen Datei Suchen und diese öffnen.
Im Dateinamen sind immer die ersten zwei Bereiche der Bezeichnung vorhanden: Bsp. Dateinamen: "000_BG00_LK.xlsm"
Ist die Datei geöffnet soll in einer Spalte nach der Vollen Bezeichnung (also 000_BG00_123) gesucht werden.
In der gefundenen Zeile sollte dann 4 Spalten weiter rechts die Bestehende Zahl um den Wert einer Zahl welche z.B.: in Zelle "C4" der Exceldatei 1 steht erhöht werden.
Wäre sowas mit Makro lösbar?
Für eure Hilfe schon mal vielen Dank.
Gruß Christian

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten in Ordner und Unterordner Suchen
17.02.2023 18:52:00
Yal
Hallo Christian,
das rekursive Durchsuchen von Verzeichnis und Unterverzeichnis ist auf alle Fälle mit Makro machbar. Es ist nur die Frage, ob es notwendig ist.
Wie oft ändern sich die Dateien?
Alternative wäre eine Liste der in Frage kommende Dateien in einem DOS-Fenster zu finden und diese zu bearbeiten.
_ Windows-Taste+r
_ "cmd" eingeben (ohne Hochkommas)
_ in der DOS-Fenster auf dem Verzeichnis navigieren: zuerst F: (oder andere) für den Laufwerk, dann cd xx\yy\zz, um zum Startverzeichnis zu navigieren
_ dir 000_BG00.xls* /b/s (Ausgabe im Fenster)
oder dir 000_BG00.xls* /b/s > Liste.scv (Ausgabe in Liste.csv im Verzeichnis xx\yy\zz)
Dateipfad verwenden, entweder per Hand oder per Makro.
Ansonsten
https://www.google.com/search?q=excel+vba+rekursive+dateisuche
VG
Yal
Anzeige
AW: Daten in Ordner und Unterordner Suchen
18.02.2023 10:33:43
Solmann
Hallo Yal,
vielen Dank für die schnelle Antwort.
Die Dateien ändern sich ca. 10-15 mal pro Tag Tendenz steigend.
Bisher werden die Werte alle händisch übernommen.
In der Vergangenheit haben sich hier immer wieder mal Fehler eingeschlichen.
Daher wollte ich dies Automatisieren.
Die in Frage kommende Datei im Windows Explorer zu finden ist nicht schwierig, da sauber strukturiert.
Ich werde mal versuchen mir was zusammenzubasteln.
Das sich das ganze "rekursives Durchsuchen" nennt wusste ich bisher nicht, da kann ich mich jetzt erst mal einarbeiten.
Danke.
Gruß Christian
Anzeige
AW: Daten in Ordner und Unterordner Suchen
19.02.2023 19:18:01
Piet
Hallo
mit dieser Beispieldatei kannst du dir einen Ordner mit Unterordner auflisten lassen.
Spalte G kann man für ein x benutzen um danach gezielt Ordner zum Suchen zu öffnen.
https://www.herber.de/bbs/user/157906.xls --- listet auch ein komplettes Laufwerk auf!
mfg Piet
AW: Daten in Ordner und Unterordner Suchen
20.02.2023 17:34:11
Yal
Hallo zusammen,
@Piet: gute Arbeit. Zielt aber auf die Auflistung alle Dateien, nicht auf das finden eine bestimmte, was meinem Verstand nach nicht Christians Wunsch entspricht. Auch schwierig: die "Suche" und die "Ausgabe" sind sehr miteinander verflechtet, was eine Erkennung der Such-Algo nicht einfach macht.
Ich schlage folgende Code (nicht besser als Piet, nur mit einem anderen Fokus):
Ich setze auf Early Binding, also Anbindung der Bibliothek durch den Projekt-Verweise, damit hat man Intellisense und Objekt-Katalog sofort verfügbar. Man kann damit direkt
Dim FSO as FileSystemObject
anstatt
Dim FSO as Object
Set FSO = CreateObject ("Scripting.Runtime")
Bei der Eingabe von EinzelTreffer = WAHR wird nach dem Finden der ersten Treffer abgebrochen, was die Suche beschleunigt. Sonst werden alle Treffer zurückgegeben. Muster-Beispiel 000_BG00_*.xlsm
Dim FSO As FileSystemObject
Dim Ergebnis
'ACHTUNG: Unter Anbindung ("Extras, "Verweise...") von der Bibliothek "Microsoft Scripting Runtime"
Public Sub Datei_finden()
Dim NamensMuster As String
Dim Einzeltreffer As Boolean
Dim StartVerz  As String
Dim E
'Init
    NamensMuster = ActiveSheet.Range("C1")
    Einzeltreffer = ActiveSheet.Range("C2")
    StartVerz = ActiveSheet.Range("C3")
    Ergebnis = Array() 'Dummy-Array mit UBound() = -1
    Set FSO = New FileSystemObject
'Start
    If NamensMuster > "" Then
    'Suchen
        Datei_finden_rek NamensMuster, StartVerz, Einzeltreffer
    'Ergebnis durchgehen
        For Each E In Ergebnis
            Debug.Print E 'Ausgabe in Direktfenster
        Next
    End If
End Sub
Private Function Datei_finden_rek(NamensMuster As String, StartVerz As String, Einzeltreffer As Boolean) As Boolean
'Return True, wenn Datei gefunden wurde (für "Einzeltreffer" relevant)
Dim F As file
Dim V As Folder
'Dateien im Verzeichnis prüfen
    For Each F In FSO.GetFolder(StartVerz).Files
        If F.Name Like NamensMuster Then
            ReDim Preserve Ergebnis(UBound(Ergebnis) + 1)
            Ergebnis(UBound(Ergebnis)) = StartVerz & "\" & F.Name
            Datei_finden_rek = True
            If Einzeltreffer Then Exit Function 'nicht weitersuchen: erste Treffer gefunden
        End If
    Next
'Subverzeichnisse durchsuchen (
    For Each V In FSO.GetFolder(StartVerz).SubFolders
        Datei_finden_rek = Datei_finden_rek(NamensMuster, V.Path, Einzeltreffer)
        If Datei_finden_rek And Einzeltreffer Then Exit Function 'step out of recursivity
    Next
End Function
(ungetestet)
VG
Yal
Anzeige
AW: Daten in Ordner und Unterordner Suchen
21.02.2023 17:45:56
Solmann
Hallo zusammen,
vielen dank für eure Mühen.
ich werde das ganze mal ausprobieren.
In der Zwischenzeit habe ich mir allerdings auch schon was überlegt wie ich ohne Makro den richtigen Dateinamen erstellen kann.
Da die Dateien immer den gleichen aufbau haben konnte ich mir über die Funktion "Verketten" und einer "Wenn dann" Funktion den Pfad und Dateinamen zusammenbasteln.
Das funktioniert soweit das ich dann über das Makro die Datei geöffnet bekomme und mir über Suchen sogar die richtige Zelle auswähle.
Allerdings scheitere ich gerade daran das ich den gewählten Zellinhalt nicht auswählen und eine Zahl hinzuaddieren kann.
NA= die gesuchte Bezeichnung
MG= der zu addierende Wert
Pfad= der fertig zusammengebaute Dateipfad

Dim NA As String
    NA = ThisWorkbook.Worksheets("Auswahl").Range("B66").Value
    
    Dim MG As String
    MG = ThisWorkbook.Worksheets("Auswahl").Range("B65").Value
    
    Dim Pfad As String
    Pfad = ThisWorkbook.Worksheets("Auswahl").Range("B70").Value
    
    With Workbooks.Open(Filename:=Pfad)
    
    Dim WB As String
    WB = ActiveWorkbook.name
        
    End With
       
    Windows(WB).Activate
    Sheets("Datenerfassung").Select
    Dim c As Range
    Dim firstAddress As String
    With Worksheets("Datenerfassung").Range("H21:H300")
        Set c = .Find(What:=NA, LookIn:=xlValues)
        If Not c Is Nothing Then
        firstAddress = c.Address
        Range(firstAddress).Select
        Selection.Offset(0, 4) = .Value + MG
        End If
        End With
          
      End Sub
Bitte entschuldigt wenn hier nicht alles so optimal ist. Aber ich bin doch noch ziemlicher Anfänger in dem Thema.
Wie gesagt den Bestehenden Zellwert und "MG" addieren funktioniert nicht.
Gruß Christian
Anzeige
AW: Daten in Ordner und Unterordner Suchen
21.02.2023 18:32:56
Yal
Hallo Christian,
jeder war irgendwann mal am Anfang :-)
Die "Dim" gehören immer alle ganz oben. Es ist nur ein Deklaration. Richtig implementiert werden die Variable erst, wenn sie gebraucht werden.
Mit den Typen der Variable wirst Du mit der Zeit zurecht kommen. Für eine Suche ist String besser. Für die Wert addieren, sollte es eien Wert sein (kein String).
Verwende lieber die Objekt selbst, als deren Eigenschaft. Z.B. die Suche liefert eine Zelle, diese wird mit der Objekt-Variable "c" referiert (deswegen "set" davor). Dann kannst Du mit dieser Reference alles tun, was Du mit einer Zelle (eigentlich gleichzeittig einen "Range") machen würdest: Du kannst deren "Address" lesen, aber auch deren "Value" und auch diese setzen.
Wenn Du den Wert der 4te Zellen rechts der gefundene Zelle addieren möchte, dann so:
Sub Wert_aufwerten()
Dim NA As String
Dim MG As Double
Dim WB As Workbook
Dim c As Range
    
    With ThisWorkbook.Worksheets("Auswahl")
        NA = .Range("B66").Value
        MG = .Range("B65").Value
        Set WB = Workbooks.Open(Filename:=.Range("B70").Value)
    End With
    
    With WB.Worksheets("Datenerfassung").Range("H21:H300")
        Set c = .Find(What:=NA, LookIn:=xlValues)
        If Not c Is Nothing Then
            c.Offset(0, 4) = c.Offset(0, 4).Value + MG
        End If
    End With
End Sub
Achte auf einem sauberen Einrücken. Das A & O, um die Lesbarkeit zu erhöhen und dumme Fehler zu vermeiden (nicht nur bei Anfänger). Wenn das Einrücken sauber ist, kann man weitgehend auf Leerzeilen verzichten. Erst dann haben Leerzeilen eine Wirkung auf die Lesbarkeit.
VG
Yal
Anzeige
AW: Daten in Ordner und Unterordner Suchen
22.02.2023 17:32:49
Solmann
Hallo zusammen,
vielen vielen Dank für die Mühe und Unterstützung.
Funktioniert klasse. :-)
Werde mit der Programmierung noch etwas spielen um daraus zu lernen und besser zu werden.
Danke auch für die Tipps, werde mir das alles mal etwas zusammenschreiben.
Gruß Christian
AW: Daten in Ordner und Unterordner Suchen
24.02.2023 17:50:29
Solmann
Hallo zusammen,
ich habe mal noch etwas gebastelt und bin wieder auf ein Problem gestoßen welches ich nicht lösen konnte.
Ich möchte eine Reihe von Daten kopieren, aber nur wenn in spalte A =Wahr steht und in Spalte D irgend ein Text.
Ansonnten soll das ganze nicht kopiert werden.
Habe das so Versucht, was leider nicht funktioniert. Es wir einfach nichts kopiert.
Dim i As Integer
 
  For p = 20 To 300
 
 
If Sheets("Datenerfassung").Cells(p, 1).Value = True And Cells(p, 4) = Not Empty Then
Wenn ich das ganze nur so eingebe wird mir alles kopiert.
If Sheets("Datenerfassung").Cells(p, 1).Value = True 
Schon mal vielen dank für eure Hilfe.
Gruß Christian
Anzeige
AW: Daten in Ordner und Unterordner Suchen
25.02.2023 14:59:36
Solmann
Hallo zusammen,
Habe es hinbekommen:
If Sheets("Datenerfassung").Cells(o, 2).Value = True And Not Cells(o, 5).Value = "" Then
Meine Reihenfolge war falsch.
Gruß Christian

112 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige