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

Datei einlesen

Datei einlesen
18.03.2019 13:12:32
Benni
Hallo zusammen,
ich stehe vor einem größeren Problem:
Ich möchte per Makro eine Datei öffnen, die vorhandenen Daten auswählen und in meine aktuelle Excel-Datei kopieren und im Anschluss die Quell-Datei schließen wieder.
Soweit funktioniert auch alles prächtig.
Das Problem ist nun folgendermaßen:
Die Quell-Datei wird in einem Ordner abgelegt in dem auch die veralteten Quelldateien der Vortage liegen. Es kann manchmal sinnvoll sein, eine Altdatei einzulesen, aus Analysegründen. Ich möchte daher ein Tool bauen, bei dem bei Ausführung des Makros der Ordner geöffnet wird, man die Datei, die geöffnet und eingelesen werden soll, auswählen kann und man im Nachhinein benachrichtigt wird, ob es sich um die neueste Datei oder eine ältere Version handelt und falls man sich verklickt hat, man sozusagen abbrechen auswählt und dadurch der Prozess abgebrochen wird oder zur Dateiauswahl rückgeführt wird.
Sprich, das Makro müsste zusätzlich zu dem Ordner-Öffnen und Datei-Auswählen nach Öffnen des Ordners allen Dateinamen aus dem Ordner das enthaltene Datum entnehmen und mit dem letztendlich geöffneten vergleichen, ob es das neueste ist oder nicht und eine entsprechende Fehlermeldung ausgeben.
Meine VBA-Kenntnisse stoßen da jedoch absolut an meine Grenzen und ich habe bisher gar keinen Ansatzpunkt, wie ich da starten soll.
Es wäre wirklich klasse, wenn mir da jemand helfen könnte! Vielen Dank im Voraus!!
VG Benni

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

Betreff
Datum
Anwender
Anzeige
AW: Datei einlesen
18.03.2019 14:30:39
Daniel
Hallo Benni,
probier's mal hiermit:
Sub NeusteDatei()
Dim Datei As Variant
Dim wbAuswahl As Workbook
Dim Pfad, Quelldateien As String
Neu:
Datei = Application.GetOpenFilename(Title:="Neuste Datei wählen", FileFilter:="Excel Files (*. _
xls*),*xls*")
If Datei  False Then
Set wbAuswahl = Application.Workbooks.Open(Datei)
Pfad = ActiveWorkbook.Path & "\"
Quelldateien = Dir(Pfad & "*xls*")
Do Until Quelldateien = ""
If FileDateTime(Datei) 
Gruß
Daniel
AW: Datei einlesen
18.03.2019 15:04:03
Benni
Hallo Daniel,
vielen Dank dir, funktioniert super! Ich habe es noch ein wenig verändern können, da ich auch die Option haben wollte, die Altdatei zu verwenden, nachdem ich darüber als Sicherheitsinfo aufgeklärt wurde.
Sieht nun folgendermaßen aus:
Sub NeusteDatei()
Dim Datei As Variant
Dim wbAuswahl As Workbook
Dim Pfad, Quelldateien As String, Abfrage As Integer
Neu:
Datei = Application.GetOpenFilename(Title:="Neuste Datei wählen", FileFilter:="Excel Files (*. _
xls*),*xls*")
If Datei  False Then
Set wbAuswahl = Application.Workbooks.Open(Datei)
Pfad = "C:\Users\xxx\Desktop\yy\Auswahlordner\"
Quelldateien = Dir(Pfad & "*xls*")
Do Until Quelldateien = ""
If FileDateTime(Datei) 

Was ich mich nun noch frage, ist: Jedes Mal, wenn ich das Makro starte, wird der letztbenutzte Ordner geöffnet. Kann ich es mir bequemer machen und bei dem GetOpenFilename einen Pfad einbauen, sodass er mir immer den richtigen Ordner direkt öffnet?
Danke nochmal und beste Grüße
Benni
Anzeige
AW: Datei einlesen
18.03.2019 15:13:14
Daniel
Bei GetOpenFilename geht das leider nicht, da müsste man eine andere Methode zum Auswählen verwenden (einfach mal nach suchen, da findet man eigentlich recht leicht etwas passendes).
Nur eine Kleinigkeit, die aber in Fällen wie hier bei der Übersichtlichkeit des Codes hilft (falls noch nicht bekannt) - wenn du bei einer If Abfrage nur eine Aktion hast, kannst du diese auch in eine Zeile schreiben. Also anstatt

If Abfrage = vbNo Then
GoTo Neu
End If

If Abfrage = vbNo Then GoTo Neu

AW: Datei einlesen
19.03.2019 08:29:00
Benni
Hallo Daniel,
danke für den Einzeiler-Tipp. Brauche ich in dem Fall das End If dann nicht mehr?
Mir ist leider aufgefallen, dass ich mich gestern evtl. missverständlich ausgedrückt habe und es auch beim Testen nicht bemerkt habe.
Das Makro soll nicht den Timestamp der Dateien vergleichen, sondern das Datum, welches im Dateinamen enthalten ist. Es kann also bspw. sein, dass mehrere verschiedene Versionen am gleichen Tag in den Ordner geschoben werden, das Makro soll in dem Fall dann trotzdem erkennen, welches die neueste ist. Das macht die Sache vermutlich wesentlich komplizierter, aber vielleicht hast du oder jemand anderes da trotzdem eine Idee?
Danke Dir!
Gruß
Benni
Anzeige
AW: Datei einlesen
19.03.2019 09:05:15
Daniel
Ja genau, das End If kommt dann nicht mehr hinter den Einzeiler.
So ganz habe ich das mit dem Datum nicht verstanden. Steht es im Dateinamen? Wie und an welcher Stelle? Wie soll dann nach Zeit unterschieden werden, wenn mehrere Dateien pro Tag erstellt werden?
Die Funktion FileDateTime unterscheidet auch nach Uhrzeit, nicht nur nach Datum. Sprich mit dem Code sollte wirklich nur die jüngste Datei gefunden werden, auch wenn mehrere mit dem gleichen Datum vorhanden sind.
AW: Datei einlesen
19.03.2019 09:17:00
Benni
Hallo Daniel,
es haben viele Personen Zugriff auf den Ordner und die Durchführung der Makros wird bald von verschiedenen Personen übernommen (die eher nur Excel-Basiskenntnisse haben). Da es so theoretisch vorkommen kann, das jemand mal in die Rohdatei reingeht und ausversehen auf Speichern klickt, würde der Timestamp der Datei verändert, das Datum im Dateinamen allerdings nicht. Sprich, der Timestamp ist wegen dem Zugriff verschiedener Personen nicht aussagekräftig. Oder es kann sein, dass gleichzeitig mehrere Dateien reingeladen werden, denen aber unterschiedliche Abzugstage zugrunde liegen. Also es wird immer nur eine Datei mit dem jeweiligen Datum im Namen im Ordner liegen, es könnten aber 3 aufeinanderfolgende Tagesversionen an einem einzigen späteren Tag angepasst und dann im Ordner abgespeichert werden und so zwar unterschiedliche Daten laut Name aber nicht laut Timestamp aufweisen. Sprich, es muss nach dem Dateinamen gefiltert werden. Das Datum steht dabei an den ersten 8 Stellen, z.B. 20190319_xxx.xlsx.
Ich hoffe, jetzt war es verständlich :)
Danke Dir!!
Gruß
Benni
Anzeige
AW: Datei einlesen
19.03.2019 09:48:24
Daniel
Ja jetzt wird es mir klarer. Dann mach es so:
Sub NeusteDatei()
Dim Datei As Variant
Dim wbAuswahl As Workbook
Dim Pfad, Quelldateien As String, Abfrage As Integer
Neu:
Datei = Application.GetOpenFilename(Title:="Neuste Datei w?hlen", FileFilter:="Excel Files (* _
.xls*),*xls*")
If Datei  False Then
Set wbAuswahl = Application.Workbooks.Open(Datei)
Pfad = "XXXXX"
Quelldateien = Dir(Pfad & "*xls*")
Do Until Quelldateien = ""
If Left(wbAuswahl.Name, 8) 

AW: Datei einlesen
19.03.2019 10:33:26
Benni
Jetzt klappt's!! Danke Dir!
Gruß
Benni

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige