Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
888to892
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
888to892
888to892
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Dateien aus Ordnern auslesen Programmüberarbeitung

Dateien aus Ordnern auslesen Programmüberarbeitung
20.07.2007 11:08:26
pain007
Hallo Office Experten!
Ich habe ein Makro geschrieben (besser gesagt ein bestehendes umgeschrieben) da wir im Büro sehr große Projekte haben, die mit der Zeit unübersichtlich werden, wenn sie im Dateiexplorer bearbeitet werden bzw. wenn irgendwelche Pläne oder Unterlagen aufgefunden werden müssen. Das Excel Sheet befindet sich auf:
https://www.herber.de/bbs/user/44275.zip
Die dazugehörige Erklärung zum Programm, Funktionsweise usw. auf:
https://www.herber.de/bbs/user/44276.doc
Grundsätzlich soll damit erreicht werden, dass mehr Übersicht über alle Dateien herrscht und das es möglich ist neue von alten Dateien, Plänen, Berichten ect. unterscheiden zu können.
Also zuerst werden alle Dateien eines betimmten Projektsordner eingelesen und dann im anderen Sheet werden diese dann nach Hauptordner, Unterordnern, untergeordneten Ordnern sortiert. Um sich schneller in der Dateiliste bewegen zu können sind im oberen Bereich Schaltflächen mit denen man schneller an die richtige Stelle hüpfen kann.
Ich habe hier ins Forum nur eine Leerliste reingestellt, da es es sich einerseits vom Speicherplatz (max 300KB) nicht ausgeht und andererseits diese Inhalte unter den Datenschutz unseres Büro fallen.
Meine Frage an Euch wäre nun, ob es noch Möglichkeiten gibt dieses Sheet noch mehr zu automatisieren, als es bisher der Fall ist. z.B das richtige Einfächern der Dateien in die dazugehörigen Ordner im Sheet Projektübersicht. Oder auch andere Vorgänge, die während der Erstellung der Dateiliste anfallen.
Ich habe leider keine fundierte Ausbildung in VBA genossen, hab ledeglich ein paar Mal in Fortran ein paar Sachen geschrieben. Ich habe zwar schon vieles rausgefunden was VBA betrifft, um überhaupt dieses Makro umschreiben zu können aber die Feinschliffe und die wirklich ausgefeilten Dinge habe ich nicht heraus.
Ich bedanke mich für Eure Hilfe und Verbesserungsvorschläge bereits im Voraus und hoffe, dass Ihr mir weiterhelfen könnt.
mfg Thomas

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dateien aus Ordnern auslesen Programmüberarbei
23.07.2007 01:25:00
fcs
Hallo Thomas,
ich hab mir deine Datei einmal vorgenommen.
Folgende Punkte könnte man für Verbesserungen in Betracht ziehen:
  • 1 Beim Erzeugen der Dateiliste nur die Dateien in die Liste aufnehmen, deren Erstelldatum/Zeitpunkt nach dem letzten Zeitpunkt der Aktualisierung der Projektübersicht liegt.

  • 2 Die Übertragung der neuen Dokumentdaten in die Projektübersicht kann man durch ein entsprechend komplexeres Makro für den Anwender einfacher gestalten. Einen ersten Anlauf findest du im Anschluss.

  • 3 Die Verfeinerung meiner Variante wäre, dass das Makro den korrekten Ordner zum Einfügen der jeweiligen neuen Dokumentdaten automatisch findet. Dazu müßte man aber die Datenstrukturen etwas besser kennen und wissen wo unter welchen Randbedingungen (Sortierung, bei Revisionen das neuere ober-/unterhalb des vorhandenen Eintrags usw.) neue Dokumentdaten in die Ordner eingefügt werden sollen.

  • Nachfolgend mein erster Ansatz zu Nr. 2.
    Folgende Änderungen ergeben sich:
    1.: In der Projektübersicht müssen die für das Einfügen der neuen Daten erforderlichen Leerzeilen nicht mehr vom Anwender erzeugt werden. Es muss "nur" noch die Zelle/Zeile selektierte werden, vor der die neuen Einträge eingefügt werden sollen.
    2.: Im Blatt "Ordner Auslesen" muss nicht mehr exakt der Zellenbereich (Spalten A bis G) markiert werden, der übertragen werden soll. Es reicht aus, wenn die Zeilen komplett markiert werden oder einfach nur ein Zellbereich, der die gewünschten Zeilen "berührt".
    3.: Einige Prüfungen sind eingebaut, die Übertragungsfehler veringern.
    Vor dem Start des Einfügens muss nochmals bestätigt werden, ob die Einfügezeile korrekt ist.
    Der Speicherort wird bei jedem Datensatz auf Übereinstimmung geprüft .
    4.: Der Inhalt der Datensätze, die in die Projektübersicht übertragen sind wird im Blatt "Ordner Auslesen"
    gelöscht. Verhindert Doppelübertragungen.
    Ich hoffe die Kommentare im Code sind ausreichend, damit du die Aktionen nachvollziehen kannst.
    Gruß
    Franz
    
    Sub Dokumentdaten_uebertragen()
    ' Makro am 22.07.07 von fcs erstellt
    Dim wksOrdner As Worksheet, wksProjekt As Worksheet, strOrt As String
    Dim rngOrdner As Range, rngProjekt As Range, arrZeilen() As Long
    Dim Reihe As Long, iZeile As Integer
    Set wksOrdner = Worksheets("Ordner Auslesen")
    Set wksProjekt = Worksheets("Projektübersicht")
    If ActiveSheet.Name  wksOrdner.Name Then
    MsgBox "Dieses Makro darf nur gestartet werden, wenn das Blatt '" & _
    wksOrdner.Name & "' das aktive Blatt ist!!"
    Exit Sub
    End If
    Set rngOrdner = Selection
    'Nummern der sichtbaren Zeilen in der Auswahl in einem Datenfeld merken
    iZeile = 0
    For Reihe = 1 To rngOrdner.Rows.Count
    If rngOrdner.Rows(Reihe).Hidden = False Then
    iZeile = iZeile + 1
    ReDim Preserve arrZeilen(1 To iZeile)
    arrZeilen(iZeile) = rngOrdner.Rows(Reihe).Row
    End If
    Next
    wksProjekt.Activate
    If MsgBox("Ist die Einfügezeile korrekt?", vbOKCancel) = vbCancel Then Exit Sub
    Set rngProjekt = wksProjekt.Cells(ActiveCell.Row, 1) 'Zelle Spalte A in Einfügezeile
    'Merken Speicherort
    strOrt = rngProjekt.Offset(0, 3).Value
    'Aktuelle Datenzeile kopieren und unterhalb wieder einfügen
    rngProjekt.EntireRow.Copy
    rngProjekt.Offset(1, 0).Insert Shift:=xlDown
    'Daten in Einfüge-Zeile löschen
    rngProjekt.EntireRow.ClearContents
    'restliche notwendigen Leerzeileneinfügen
    If UBound(arrZeilen) > 1 Then
    With wksProjekt
    .Range(.Rows(rngProjekt.Row + 1), _
    .Rows(rngProjekt.Row + UBound(arrZeilen) - 1)).Insert Shift:=xlDown
    End With
    End If
    'Selektierte Daten zeilenweise einfügen
    iZeile = 0 'Zähler für Zeilen relativ zur Einfügezeile,
    With wksOrdner
    For Reihe = LBound(arrZeilen) To UBound(arrZeilen)
    'Prüfung ob Speicherort übereinstimmt
    'Falls Speicherort in Projektübersicht leer dann wird immer eingetragen _
    (1. Dokumente werden in einem Ordner eingetragen)
    If strOrt  .Cells(arrZeilen(Reihe), 4) And strOrt  "" Then
    Test = MsgBox("Der Speicherort der im Blatt 'Ordner Auslesen' selektierten Datei: " _
    & vbLf & vbLf & .Cells(arrZeilen(Reihe), 6) & vbLf & vbLf _
    & "stimmt nicht mit dem in der Projektübersicht gewählten Ordner" _
    & vbLf & vbLf & strOrt & vbLf & vbLf _
    & "überein! Dokumentdaten werden nicht eingefügt!", vbRetryCancel)
    Select Case Test
    Case vbRetry
    'do nothing
    Case vbCancel
    GoTo ende
    End Select
    Else
    'Datensatz kopieren
    .Range(.Cells(arrZeilen(Reihe), 1), .Cells(arrZeilen(Reihe), 7)).Copy _
    Destination:=rngProjekt.Offset(iZeile, 0)
    'Inhalt in übertragener Zeile löschen (Doppelübertragung verhindern)
    .Rows(arrZeilen(Reihe)).ClearContents
    iZeile = iZeile + 1
    End If
    Next
    End With
    ende:
    rngProjekt.Select
    With wksProjekt
    'ggf. Leerzeilen wieder löschen wenn abgebrochen oder Zeile übersprungen wurde
    If iZeile  UBound(arrZeilen) Then
    .Range(.Rows(rngProjekt.Row + iZeile), _
    .Rows(rngProjekt.Row + UBound(arrZeilen) - 1)).Delete Shift:=xlUp
    End If
    End With
    End Sub
    


    Anzeige
    AW: Dateien aus Ordnern auslesen Programmüberarbei
    23.07.2007 08:04:17
    pain007
    Vielen Dank für die Hilfe!
    Hab es natürlich gleich versucht, klappt prima. Eine Funktion, bei der man vor einlesen der Dateien das Erstellungsdatum auswählen kann wäre toll. Leider weiß ich nicht, wie ich das anstellen soll (VBA ist leider nicht so meine Stärke)
    Wär super, wenn ihr mir auch hier weiterhelfen könntet.
    Vielen Dank nochmal für die schnelle Hilfe, ihr seid spitzenklasse!
    mfg Thomas

    AW: Dateien aus Ordnern auslesen Programmüberarbei
    24.07.2007 00:55:00
    fcs
    Hallo Thomas,
    hier die Anpassung, um einen Stichtermin (Datum + Zeit) für das Einlesen der Dateien-Daten vorzugeben.
    Da diesmal im Blatt "Ordner Auslesen" auch ein paar kleine Anpassungen notwendig sind hab ich die Datei angehängt, allerdings nur mit diesem Blatt. In Zelle I1 (mit besonderem benutzerdefiniertem Format) wird jeweils der Zeitpunkt gespeichert wenn ein neuer Ordner ausgelesen wurde. Falls du eine andere zelle im Blatt verwenden möchtest, dann bitte die beiden Zeilen im Code entsprechend anpassen.
    Der Inhalt der Zelle wird auch in einem Rechteck angezeigt, dass ich zusätzlich in Zelle A1 plaziert hab. Diesen Kunstgriff musste ich anwendne, da in diesem Bereich der tbelle kein freien Zellen sind.
    Den Code im Modul1 deiner Datei muss du komlett durch den von mir überarbeiteten Code ersetzen. Außer der Prüfung des Erstelldatums beim Einlesen der Daten hab ich noch den Programmablauf für das Einlesen der Daten eines weiteren Ordeners angepasst, so dass der Stichtag fürs Einlesen nur einmal eingegeben werden muss.
    https://www.herber.de/bbs/user/44380.xls
    Gruß
    Franz
    P.S.:Deine Datei enthält übrigens sehr viel "Datenmüll". Die Dateigröße des Blatt "Ordner Auslesen" schrumpft von 1,8 MByte auf ca. 86 kByte mit folgenden Aktionen:
    1. markiere die Spalten K bis IV, dann Zellen löschen
    2. markiere die Zeilen ab ca. Zeile 25 nach unten bis zum Ende der Tabelle. Dann Bearbeiten - Löschen - Alles
    3. Dann neu formatieren der Spalten, Spalten A bis D, F und G als Text formatieren, Spalte E als Datum.
    4. Spalten A bis G markieren und Rahmen (Innenlienein plus Rahmen)

    Anzeige
    AW: Dateien aus Ordnern auslesen Programmüberarbei
    24.07.2007 08:03:30
    pain007
    Hallo Franz!
    Vielen Dank für deine Modifizierung und den Tipps zur Reduzierung der Dateigröße, hab mich eh schon gewundert, warum das File so viel Speicherplatz benötigt.
    Toll wäre noch, wenn man eine Option eingeben könnte, ob man das Aktualisierungsdatum angibt oder einfach alle Dateien des Ordners einliest.
    Diese Excel File dient ja auch zur Einlesung neuer Projekte.
    Als Aktualisierungsmethode ist deine Änderung, sehr praktisch, nur wäre eine Option ob man ein Datum eingibt oder gleich alle Dateien einlist toll.
    Wäre super, wenn du mir weiterhelfen könntest.
    Vielen Dank im Voraus,
    mfg Thomas

    Anzeige
    AW: Dateien aus Ordnern auslesen Programmüberarbei
    24.07.2007 15:37:54
    fcs
    Hallo Thomas,
    ich habs jetzt so eingerichtet, das bei Eingabe von 0 alle Dateien der Ordner eingelesen werden.
    Dazu muss du in folgendem Abschnitt des Makros Anpassungen machen:
    
    Sub NeuEinlesen()
    Dim Eingabe As String, xStart As Long, x As Long
    'Zeitpunkt der letzten Aktualiserung aus der Tabelle auslesen
    On Error GoTo Fehlerbehandlung
    LetzteAktualisierung = Range("I1").Value
    Eingabe = InputBox(Prompt:="Bitte Datum Zeit eingeben ab dem Dateinamen eingelesen werden  _
    sollen." _
    & vbLf & vbLf & "Vorgabewert = Zeitpunkt der letzen Aktualisierung" & vbLf _
    & "Eingabeformat: TT.MM.JJJJ hh:mm:ss" & vbLf & vbLf _
    & "Bei Eingabe 0 werden alle Dateien des Ordners eingelesen", _
    Title:="Dateiliste Projekt einlesen", _
    Default:=Format(LetzteAktualisierung, "DD.MM.YYYY hh:mm:ss"))
    If Eingabe = "" Then
    Exit Sub 'Abbrechen wurde gewählt
    ElseIf Eingabe = "0" Then
    Eingabe = "01.01.1900 00:00:00"
    End If
    LetzteAktualisierung = DateValue(Eingabe) + TimeValue(Eingabe)
    xStart = 1
    Einlesen: ' Sprungadresse wenn weitere Ordner eingelesen werden sollen
    


    Anzeige
    AW: Dateien aus Ordnern auslesen Programmüberarbei
    25.07.2007 09:12:07
    pain007
    Hallo Franz!
    Vielen Dank für deinen Überarbeiteten Quellcode, die elseif Funktion hat nicht funktioniert, musste sie auf if ändern, bei dieser Stelle:
    If Eingabe = "" Then
    Exit Sub 'Abbrechen wurde gewählt
    ElseIf Eingabe = "0" Then
    Eingabe = "01.01.1900 00:00:00"
    End If
    Dann hat es funktioniert.
    Dann hab ich allerdings versucht, deinen Quellcode in mein File einzubauen. Er zeigt auch alle Fenster und Meldungen, die er zeigen soll, jedoch liest er alle Dateien ein, auch die vor dem Datum erstellt worden sind. Hab im Quellcode herumgesucht, bin aber nicht schlau geworden.
    Wäre super, wenn du dir das kurz anschauen könntest, hab das File unter folgendem Link hinterlegt:
    https://www.herber.de/bbs/user/44411.zip
    Vielen Dank im Voraus,
    mfg Thomas

    Anzeige
    AW: Dateien aus Ordnern auslesen Programmüberarbei
    25.07.2007 10:15:00
    pain007
    Hi nochmal!
    Hab noch ein bisschen herumgebastelt. Das mit dem else if hat schon gepasst nur die Zeilenaufteilung hat nicht gestimmt, so funktioniert es jetzt:
    If Eingabe = "" Then
    Exit Sub 'Abbrechen wurde gewählt
    ElseIf Eingabe = "0" Then
    Eingabe = "01.01.1900 00:00:00"
    End If
    Die Eingabe mit dem Datum funktioniert auch super, aber wenn ich 0 eingebe, nimmt er trotzdem das Datum der letzten Aktualisierung und nicht 01.01.1900 00:00:00.
    Hab es soweit ich es abgeändert habe nochmal reingestellt unter:
    https://www.herber.de/bbs/user/44412.zip
    Vielen Dank für dein Hilfe,
    mfg Thomas

    Anzeige
    AW: Dateien aus Ordnern auslesen Programmüberarbei
    25.07.2007 13:56:00
    pain007
    Hallo nochmal Franz!
    Ich bin hinter den Fehler gekommen, man darf das Datum nicht der Variable "Eingabe" zuordnern sondern der Variable "LetzteAktualisierung". Das aktuelle File ist hinterlegt unter:
    https://www.herber.de/bbs/user/44424.zip
    vielleicht hast du ja selbst auch Interesse daran.
    Werd jetzt damit sowieso laufend arbeiten und schnell bemerken, wenn etwas nicht stimmen sollte. Vielleicht fällt dir ja noch was ein, mit dem man das Programm noch schneller und automatisierter machen kann.
    Vielen, vielen Dank für deine bisherige Hilfe,
    mfg Thomas
    Anzeige

    307 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Links zu Excel-Dialogen

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige