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

Daten aus Dateinamen in Spalten schreiben

Daten aus Dateinamen in Spalten schreiben
29.06.2006 09:35:29
kb2stripe
Hallo zusammen,
bräuchte eine Methode die folgendes macht:
In einen Ordner gehen in denen Dateien nach folgendem Muster liegen:
Kategorie-Verfasser-Herkunft-Datum.pdf (als beispiel für ein pdf file in diesem Fall, das Datum wird im Format YYYY_MM_DD eingegeben, d.h. die einzelnen Informationen sind im Dateinamen immer durch Bindestriche (-) getrennt.)
Besteht jetzt die Möglichkeit durch VB die Dateinamen auszulesen und mir dann in Excel:
In Spalte A die Kategorie
in Spalte E das Datum
in Spalte F die Quelle
in Spalte G die Herkunft
angeben zu lassen? Müsste Excel halt irgendwie beibringen dass vor dem ersten Bindestrich die Kategorie steht, zwischen dem ersten und zweiten Bindestrich der Verfasser, zwischen dem zweiten und dritten die Herkunft und nach dem dritten das Datum.
Kann mir da vielleicht jemand von euch weiterhelfen?
gruß
Pat

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten aus Dateinamen in Spalten schreiben
29.06.2006 10:00:01
Heiko
Hallo Pat,
z.B. so.

Sub DatenPDFAusOrdner()
Dim lngI As Long
Dim arrDaten() As String
With Application.FileSearch
' Ordner anpassen !!!
.LookIn = "C:\Copy\Muell\Neuer Ordner"
.SearchSubFolders = False
.Filename = "*.pdf"
If .Execute > 0 Then
For lngI = 1 To .FoundFiles.Count
arrDaten = Split(Right(.FoundFiles(lngI), Len(.FoundFiles(lngI)) - InStrRev(.FoundFiles(lngI), "\")), "-")
ActiveSheet.Cells(lngI + 1, 1) = arrDaten(0)
ActiveSheet.Cells(lngI + 1, 6) = arrDaten(1)
ActiveSheet.Cells(lngI + 1, 7) = arrDaten(2)
ActiveSheet.Cells(lngI + 1, 5) = Left(arrDaten(3), Len(arrDaten(3)) - 4)
Next lngI
Else
MsgBox "Es wurden keine Dateien im angebenen Order gefunden !", vbCritical
End If
End With
End Sub

Gruß Heiko
PS: Rückmeldung wäre nett !
Anzeige
AW: Daten aus Dateinamen in Spalten schreiben
29.06.2006 10:19:25
kb2stripe
Hi Heiko,
habe deinen Code mal genommen und getestet, bekomme folgende Fehlermeldung:
"Laufzeitfehler '9': Index außerhalb des gültigen Bereichs"
gruß
Pat
AW: Daten aus Dateinamen in Spalten schreiben
29.06.2006 10:25:33
kb2stripe
Glaube ich weiss jetzt woran es liegt. Wenn ich Dateien im Ordner habe die NICHT nach der Struktur benannt sind, dann taucht dieser Fehler auf.
Gibt es da evtl ne Möglichkeit dass er wenn dieser Fall eintritt nicht das ganze Makro abbricht, sondern diese Dateien einfach ignoriert?
gruß
Pat
ps: ansonsten funktioniert es einwandfrei :)
AW: Daten aus Dateinamen in Spalten schreiben
29.06.2006 11:54:11
Heiko
Hallo Pat,
dann so:

Sub DatenPDFAusOrdner()
Dim lngI As Long, lngN As Long
Dim arrDaten() As String
lngN = 1
With Application.FileSearch
' Ordner anpassen !!!
.LookIn = "C:\Copy\Muell\Neuer Ordner"
.SearchSubFolders = False
.Filename = "*.txt"
If .Execute > 0 Then
For lngI = 1 To .FoundFiles.Count
arrDaten = Split(Right(.FoundFiles(lngI), Len(.FoundFiles(lngI)) - InStrRev(.FoundFiles(lngI), "\")), "-")
If UBound(arrDaten) = 3 Then
ActiveSheet.Cells(lngN + 1, 1) = arrDaten(0)
ActiveSheet.Cells(lngN + 1, 6) = arrDaten(1)
ActiveSheet.Cells(lngN + 1, 7) = arrDaten(2)
ActiveSheet.Cells(lngN + 1, 5) = Left(arrDaten(3), Len(arrDaten(3)) - 4)
lngN = lngN + 1
End If
Next lngI
Else
MsgBox "Es wurden keine Dateien im angebenen Order gefunden !", vbCritical
End If
End With
End Sub

Gruß Heiko
PS: Rückmeldung wäre nett !
Anzeige
AW: Daten aus Dateinamen in Spalten schreiben
29.06.2006 12:33:58
kb2stripe
Das klappt einwandfrei :) Vielen Dank für deine schnelle Hilfe!!!!
Mir ist gerade aufgefallen dass es noch eine Dateigruppe gibt die eine andere Struktur hat und zwar die .doc Dateien, die sehen wie folgt aus:
Kategorie-Verfasser-Herkunft-Datum-NR.doc (wobei NR = zweistellige Ziffer z.B. 01 oder 27).
Wenn ich da eine separate Methode für schreiben will, wie muss die aussehen? Habe es mal selbst versucht, klappt aber nicht *gg* hab den code wie folgt geändert (eingebaut in eine schleife):
...
If InStr(WordDatei, "BvDP") &gt 0 Then
DocWd.Range(0, 0).Select
TextWD = DocWd.Bookmarks("\Line").Range.Text
'In Excel schreiben
.Cells(aktZeile, "C") = "Newsletter BvDP"
' .Cells(aktZeile, "F") = "Bundesverband deutscher Postdienstleister e.V."
End If
If TextWD &lt&gt "" Then
arrDaten = Split(Right(datei_name, Len(datei_name) - InStrRev(datei_name, "\")), "-")
If UBound(arrDaten) = 4 Then
.Cells(aktZeile, 6) = arrDaten(1)
.Cells(aktZeile, 7) = arrDaten(2)
.Cells(aktZeile, 5) = Left(arrDaten(4), Len(arrDaten(4)) - 4)
End If
.Cells(aktZeile, "D") = TextWD
.Cells(aktZeile, "J") = WordDatei
.Cells(aktZeile, "A") = "Wettbewerberinformationen"
.Cells(aktZeile, "B") = "Presseauswertungen"
.Cells(aktZeile, "L") = Left(Cells(aktZeile, 10), Len(Cells(aktZeile, 10)) - 3) & "pdf"
aktZeile = aktZeile + 1
End If
...
-------------------------
leider gibt er mir für die Spalten 5, 6 und 7 nichts aus. woran könnte das liegen?
gruß
Pat
Anzeige
AW: Daten aus Dateinamen in Spalten schreiben
29.06.2006 13:56:15
kb2stripe
Hallo zusammen,
ein weiteres Problem macht mir Kopfschmerzen. Das Datum im Dateinamen ist im Format YYYY_MM_DD angegeben, in der Spalte in Excel sollte jedoch nachher stehen:
DD.MM.YYYY 00:00
das 00:00 ist ja kein Problem, das hänge ich einfach mit einem + " 00:00" hinten dran. Wie aber kriege ich ihn dazu das Datum anders auszugeben?
gruß
Pat
AW: Daten aus Dateinamen in Spalten schreiben
29.06.2006 14:35:30
Heiko
Hallo Pat,
vielleicht so, die Spalten wohin ausgegeben wird bitte selbst anpassen.

Sub DatenDOCAusOrdner()
Dim lngI As Long, lngN As Long
Dim arrDaten() As String
lngN = 1
With Application.FileSearch
' Ordner anpassen !!!
.LookIn = "C:\Copy"
.SearchSubFolders = False
.Filename = "*.doc"
If .Execute > 0 Then
For lngI = 1 To .FoundFiles.Count
arrDaten = Split(Right(.FoundFiles(lngI), Len(.FoundFiles(lngI)) - InStrRev(.FoundFiles(lngI), "\")), "-")
If UBound(arrDaten) = 4 Then
' Die Spalte in die geschrieben werden soll hier anpassen .Cells(lngN + 1, Spalte)
ActiveSheet.Cells(lngN + 1, 1) = arrDaten(0)
ActiveSheet.Cells(lngN + 1, 2) = arrDaten(1)
ActiveSheet.Cells(lngN + 1, 3) = arrDaten(2)
ActiveSheet.Cells(lngN + 1, 4) = Format(Replace(arrDaten(3), "_", "."), "DD.MM.YYYY" & "  00:00")
' Das formatieren auf Text der Spalte 5 kann acuh raus.
ActiveSheet.Cells(lngN + 1, 5).NumberFormat = "@"
ActiveSheet.Cells(lngN + 1, 5) = Left(arrDaten(4), Len(arrDaten(4)) - 4)
lngN = lngN + 1
End If
Next lngI
Else
MsgBox "Es wurden keine Dateien im angebenen Order gefunden !", vbCritical
End If
End With
End Sub

Gruß Heiko
PS: Rückmeldung wäre nett !
Anzeige
AW: Daten aus Dateinamen in Spalten schreiben
29.06.2006 16:51:48
kb2stripe
Also für die Dateien mit 4 Bindestrichen funktioniert das perfekt :)
aber wie muss das aussehen bei welchen mit 3 Bindestrichen? Hab rumprobiert, kriege aber einfach nicht das richtige Datum ausgegeben.
gruß
Pat
AW: Daten aus Dateinamen in Spalten schreiben
29.06.2006 21:19:12
Heiko
Hallo Pat,
wo ist jetzt das Problem, bei der den PDF Dateien mit der Datumsdarstellung oder gibt es noch DOC dateien mit 3 Bindestrichen oder was ?!
Drück dich doch mal bitte etwas klarer aus.
Gruß Heiko
AW: Daten aus Dateinamen in Spalten schreiben
29.06.2006 22:44:42
kb2stripe
Hi Heiko,
sorry für meine kurze Ausführung, versuche es dieses Mal etwas besser zu beschreiben.
Bei den doc Dateien ist es kein Problem, aber das Datum muss bei den restlichen Dateien (u.a. den pdfs) auch im DD.MM.YYYY Format stehen.
Habe versucht diesen Teil des Codes:
If UBound(arrDaten) = 4 Then
ActiveSheet.Cells(lngN + 1, 6) = arrDaten(1)
ActiveSheet.Cells(lngN + 1, 7) = arrDaten(2)
ActiveSheet.Cells(lngN + 1, 5) = Format(Replace(arrDaten(3), "_", "."), "DD.MM.YYYY" & " 00:00")
~f~
umzuschreiben so dass es auch mit Dateinamen klappt die nur drei Zeichen haben, habe dann also den Code wie folgt umgeschrieben:
~f~
If UBound(arrDaten) = 3 Then
ActiveSheet.Cells(lngN + 1, 6) = arrDaten(1)
ActiveSheet.Cells(lngN + 1, 7) = arrDaten(2)
ActiveSheet.Cells(lngN + 1, 5) = Format(Replace(arrDaten(3), "_", "."), "DD.MM.YYYY" & " 00:00")
Kriege dann aber als Ergebnis in der Spalte 5 etwas wie 2006.01.27.pdf anstatt von 27.01.2006 00:00
Woran es liegt weiss ich leider nicht, hatte angenommen das einfach so umändern zu können; hoffe ich habe den Fehler dieses Mal besser beschrieben, bin noch nicht so lange hier im Forum bzw mit Excel/VB generell erst seit kurzem tätig.
Viele Grüße,
Pat
Anzeige
AW: Daten aus Dateinamen in Spalten schreiben
30.06.2006 07:24:51
Heiko
Moin Pat,
dann so für PDF´s mit 3 Bindestrichen und richtigem Datum.

Sub DatenPDFAusOrdner()
Dim lngI As Long, lngN As Long
Dim strHelp As String
Dim arrDaten() As String
lngN = 1
With Application.FileSearch
' Ordner anpassen !!!
.LookIn = "C:\Copy\Muell\Neuer Ordner"
.SearchSubFolders = False
.Filename = "*.txt"
If .Execute > 0 Then
For lngI = 1 To .FoundFiles.Count
arrDaten = Split(Right(.FoundFiles(lngI), Len(.FoundFiles(lngI)) - InStrRev(.FoundFiles(lngI), "\")), "-")
If UBound(arrDaten) = 3 Then
ActiveSheet.Cells(lngN + 1, 1) = arrDaten(0)
ActiveSheet.Cells(lngN + 1, 6) = arrDaten(1)
ActiveSheet.Cells(lngN + 1, 7) = arrDaten(2)
strHelp = Left(arrDaten(3), Len(arrDaten(3)) - 4)
ActiveSheet.Cells(lngN + 1, 5) = Format(Replace(strHelp, "_", "."), "DD.MM.YYYY" & "  00:00")
lngN = lngN + 1
End If
Next lngI
Else
MsgBox "Es wurden keine Dateien im angebenen Order gefunden !", vbCritical
End If
End With
End Sub

Gruß Heiko
PS: Rückmeldung wäre nett !
Anzeige
AW: Daten aus Dateinamen in Spalten schreiben
30.06.2006 09:14:24
kb2stripe
Hallo Heiko,
es klappt :) vielen Dank für deine Mühe, du hast mir wirklich weitergeholfen!!!
Viele Grüße und ein schönes Wochenende,
Pat

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige