Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1224to1228
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

Marko - Verzeichnisse auslesen-Daten verarbeiten

Marko - Verzeichnisse auslesen-Daten verarbeiten
Klaus
Hallo ihr Experten,
möglicherweise kann jemand eine Lösung für folgende Problemstellung finden.
Folgendes ist gegeben:
ein Verzeichnisbaum mit 6 Ebenen
  • Startverzeichnis: c:\Objekte (Ebene 0)

  • Unterverzeichnis: darin 3 Verzeichnissen: V1,V2,V3

  • Unterverzeichnis: darin je: unbestimmte Anzahl Verzeichnisse. Die Verzeichnisnamen bestehen aus 6-stelligen Nummern, die in V1, V2, oder V3 vorkommen können.

  • Unterverzeichnis: darin Verzeichnisnamen =Jahreszahlen von 2003 bis 2013, wenn denen nur das Vorjahr und das laufenden Jahr zu betrachten sind.
  • (Jetzt wird es wieder etwas einfacher, weil nicht mir EACH gesucht werden muss)
  • Unterverzeichnis: nur fester Verzeichnisname "E4" interessiert

  • Unterverzeichnis: nur fester Verzeichnisname "E5" interessiert

  • in E5 kann eine Exceldatei vorkommen, die u.a(!) "Wartung" im Dateinamen enthält.
    Diese Datei soll aus dem Verzeichnispfad des letzten Jahres in dieses Jahr kopiert werden (vorausgesetzt, sie gibt es nicht schon)
    Problem: Ständiges Durchhangeln durch die Verzeichnisse ist lästig.
    Ist man in Ebene5 angekommen, ist ggf. die Datei aus dem Vorjahr noch gar nicht da.
    Die Verzeichnisstruktur ist nicht veränderbar.
    Gesucht ist eine Lösung für:
    a) Übertrage alle Exceldateien aus Ebene5 die "Wartung" in Dateinamen führen vom Verzeichnis des Vorjahres in das Verzeichnis des laufenden Jahres.
    Also z.B. von c:\Objekte\100100\2010\E 4\E 5\Wartung Sesamstr. 1.xls nach c:\Objekte\100100\2011\E4\E5\Wartung Sesamstr. 1.xls
    b) Erstelle ein Excel-Tabelle, die alle Objektnummern aus Ebene2 enthält und die dazugehörigen Dateienamen aus Ebene5, die "Wartung" im Dateinamen enthalten.
    ba) Die Tabelle soll sich nach den Objektnummern filtern lassen.
    bb) Die Objektnummern (oder Hilfsfelder) sollen Hyperlinks sein, mit denen sich Ebene5 anspringen lässt (ggf. gleich die Wartungsdatei aufrufen).
    Ich hoffe jemand kennt sich mit rekursiver Suche mittels VBA aus und hat eine Idee, wie man die Tabelle und Hyperlinks bastelt.
    Gruß
    Klaus

    3
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Benutzer
    Anzeige
    AW: Marko - Verzeichnisse auslesen-Daten verarbeiten
    09.08.2011 09:48:13
    Tino
    Hallo,
    hier mal eine Variante (wenn ich es richtig verstanden habe!) zum kopieren der Dateien von
    C:\Objekte\100100\2010\E4\E5\ nach C:\Objekte\100100\2011\E4\E5\
    Option Explicit
    
    Sub kopieren()
    Dim Quelle$, FileFilter$, Ziel$, FileName$, ArrayDir(), strDir
    Dim varJahr, nC&, strInfo$, strInfoKopie$
    
    varJahr = Year(Date) 'Jahr 
    FileFilter = "Wartung*.xls" 'File-Filter 
    
    Quelle = "C:\Objekte\100100\" & CStr(varJahr - 1) & "\E4\E5\" 'Quelle 
    Ziel = "C:\Objekte\100100\" & CStr(varJahr) & "\E4\E5\" 'Ziel 
    
    On Error GoTo ErrorH:
    ChDrive Left$(Quelle, 3)
    ChDir Quelle
    'Dateien Suchen 
    strDir = Dir(Quelle & FileFilter, vbNormal)
    Do While strDir <> ""
        Redim Preserve ArrayDir(nC)
        ArrayDir(nC) = strDir
        nC = nC + 1
        strDir = Dir()
    Loop
    
    'kopieren 
    ChDrive Left$(Ziel, 3)
    ChDir Ziel
    For nC = Lbound(ArrayDir) To Ubound(ArrayDir)
        If Dir(Ziel & ArrayDir(nC), vbNormal) = "" Then
            FileCopy Quelle & ArrayDir(nC), Ziel & ArrayDir(nC)
            strInfoKopie = strInfoKopie & ArrayDir(nC) & vbCr
        Else
            strInfo = strInfo & ArrayDir(nC) & vbCr
        End If
    Next nC
    
    
    'Info ausgeben 
    If strInfo <> "" Then
        MsgBox "Diese Dateien waren im Ordner " & varJahr & " vohanden" & _
                vbCr & vbCr & strInfo
    End If
    
    If strInfoKopie <> "" Then
        MsgBox "Diese Datei(en) wurden in den Ordner " & varJahr & " kopiert" & _
                vbCr & vbCr & strInfoKopie
    Else
        MsgBox "Es wurde keine Datei kopiert!", vbExclamation
    End If
    
    Exit Sub
    
    ErrorH: 'Fehlerausgabe 
    MsgBox Err.Description, _
           vbCritical + vbMsgBoxHelpButton, _
           "Error: " & Err.Number, Err.HelpFile, Err.HelpContext
    End Sub
    
    Gruß Tino
    Anzeige
    AW: Marko - Verzeichnisse auslesen-Daten verarbeiten
    09.08.2011 15:53:43
    Tino
    Hallo,
    so habe mal soweit ich Dich verstanden habe den Code so aufgebaut.
    Hier der Test- Ordner als Zip-File,
    im Code müsstest Du später den Pfad an der Kommentierten stelle richtig stellen auf C:\Objekte\
    Im Excel- File TestFile.xls werden alle Dateien die aus einem Ordner 2011 (akt. Jahr) aufgelistet
    die mit Wartung im Namen anfangen, nicht die aus dem vergangenen Jahr.
    https://www.herber.de/bbs/user/76081.zip
    Gruß Tino
    AW: Marko - Verzeichnisse auslesen-Daten verarbeiten
    09.08.2011 19:58:36
    Klaus
    Hallo Tino,
    große Klasse!
    Ich bekomme zwar keine Anzeige in der Tabelle. Aber nach dem ich
    .Cells.Formula = ArrayFileList
    lahm gelegt hatte, lief das Programm durch und kopierte die Dateien wie gewünscht.
    Dafür vielen Dank. Damit ersparst du mir Jahr für Jahr viel Handarbeit.
    Die Sache mit der Tabelle und den Hyperlinks ist eigentlich auch keine VBA-Aufgabe, da sie nur einmalig anfällt und sich die Daten nicht ändern.
    Ich habe ich so gelöst:
    Alle Verzeichnisse mit Wartung*.xls ermittelt und eine txt-Datei schreiben lassen mit
    dir \wartung*.xls /a-d /b /s umgeleitet in verzeich.txt
    Diese txt in Excel importiert und \ als Feldtrenner angegeben; schon waren die Verzeichnisse in separaten Spalten.
    Im Dateinamen wartung xxxxxx.xls war der Straßenname des Objekten. Den mit Formel mit WECHSELN und GLÄTTEN in eine weitere Spalte extrahiert. Jetzt kann man nach Objektnummer, Straßennamen und Jahr filtern.
    Noch zwei weitere Spalten mit HYPERLINK und VERKETTEN gefüllt um direkt die Wartungsdatei anzuspringen oder nur in das Wartungsverzeichnis zu gelangen.
    Im Folgejahr muss ich nur in der Jahresverzeichnis-Spalte alle Datensätze mit 2011 kopieren und auf 2012 ändern (das sind nur 5 Klicks) und durch die Formel mit HYPERLINK und VERKETTEN werden dann autmatisch die richten Dateien angesprungen.
    Gruß
    Klaus
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige