Die Reihenfloge scheint mir Abhängig vom Datum und vom zweiten Z-Wert im Dateinamen zu sein. Darum sollte das erste Anliegen darin bestehen diese Informationen herauszufiltern und falls erforderlich in die richtige Reihenfolge zu bringen. Erst dann ist an einen strukturierten Datenimport überhaupt zu erst zu denken.
Option Explicit
Private Type TUDFileInfo
Idx1 As Integer
Idx2 As Integer
Date As Date
Name As String
Path As String
Extension As String
End Type
Public Sub Test()
Const C_FOLDER As String = "X:\Verzeichnis\Unterverzeichnis\"
Dim strFile As String
Dim udfi As TUDFileInfo
strFile = Dir$(C_FOLDER & "\*.csv")
Do Until strFile = ""
If GetUDFileInfo(C_FOLDER & "\" & strFile, udfi) Then
'Ausgabe im VBA-Direktfenster (ggf. einblenden mit STRG+G)
Debug.Print udfi.Name, udfi.Idx1, udfi.Idx2, Format$(udfi.Date, "yyyy-mm-dd")
End If
strFile = Dir$()
Loop
End Sub
Private Function GetUDFileInfo(Filename As String, ByRef UDFileInfo As TUDFileInfo) As Boolean
With UDFileInfo
'ggf. Dateiname und Dateipfad voneinander trennen
If InStrRev(Filename, "\") > 0 Then
.Path = Trim$(Left$(Filename, InStrRev(Filename, "\")))
.Name = Mid$(Filename, Len(.Path) + 1, Len(Filename) - Len(.Path))
Else
.Path = ""
.Name = Trim$(Filename)
End If
'ggf. (am weitesten rechts stehende) Dateiendung entfernen
If InStrRev(.Name, ".") > 0 Then .Name = Left$(.Name, InStrRev(.Name, ".") - 1)
'prüfen ob der Dateiname den erwartenden Kriterien entspricht
If Not .Name Like "Z##_Z##_D######" Then Exit Function
'Informationen sammeln
.Idx1 = Mid(.Name, 2, 2)
.Idx2 = Mid(.Name, 6, 2)
.Date = DateSerial(Year:=Mid(.Name, Len(.Name) - 5, 2), _
Month:=Mid(.Name, Len(.Name) - 3, 2), _
Day:=Right(.Name, 2))
End With
GetUDFileInfo = True
End Function
Ausgabe könnte dann so aussehen:
Z01_Z10_D140515 1 10 2014-05-15
Z01_Z10_D140516 1 10 2014-05-16
Z11_Z20_D140515 11 20 2014-05-15
Z11_Z20_D140516 11 20 2014-05-16
|