Hallo, habe mir einige Artikel zu dem Thema durchgelesen, da ich ebenfalls regelmäßig identisch aufgebaute csv-Datensätze in einer Exceltabelle (2003) zusammenfassen möchte.
Die CSV-Dateien enthalten in Zeile 1 die Feldnamen und in Zeile 2 die jeweiligen Daten.
Die Daten in der CSV-Datei sind per Semikolon getrennt, Dezimalstellen per Punkt, Text enthält manchmal Kommas.
Diese Daten müssen täglich in eine Datenbank eingespielt werden.
Da es reichlich umständlich ist, täglich 50 CSV-Dateien einzeln zu importieren, sollen sie in einer Exceltabelle zusammengefasst werden, um die Daten in einem Rutsch in die Datenbank zu importieren.
Das wäre eine echte Erleichterung.
Die Execeltabelle soll daher folgendermaßen aussehen:
In Zeile 1 die Feldnamen aus den CSV-Dateien (die ja immer gleich sind).
Ab Zeile 2 die eigentlichen Daten.
Ich habe den Code aus http://www.wer-weiss-was.de/article/6344078 für mich folgendermaßen angepasst:
Sub CSVEinlesen()
Dim fs As FileSearch, ZeiQ As Long, ZeiZ As Long, F As Integer
Dim wksQ As Worksheet, wksZ As Worksheet
Set wksZ = ThisWorkbook.Worksheets(„Tabelle1“) 'Anpassen
Set fs = Application.FileSearch
On Error GoTo hell
Call Loesch
Application.ScreenUpdating = False
With fs
.LookIn = „C:…Anfragen\CSV“ 'Anpassen
.SearchSubFolders = False 'Anpassen
.Filename = „*.csv“
If .Execute() > 0 Then
For F = 1 To .FoundFiles.Count
ZeiZ = wksZ.Cells(Rows.Count, 1).End(xlUp).Row + 1
Workbooks.Open Filename:=.FoundFiles(F) ', Format:=4 '4=Semikolon 'Anpassen
ZeiQ = ActiveWorkbook.Worksheets(1).Cells(Rows.Count, 1).End(xlUp).Row
ActiveWorkbook.Worksheets(1).Rows(„2:“ & ZeiQ).Copy Destination:=wksZ.Cells(ZeiZ, 1)
Next F
Else
MsgBox „There were no xls files found in c:…Anfragen\CSV.“
End If
Call Loesch
End With
hell:
If Err.Number 0 Then
MsgBox ActiveWorkbook.Name & vbCr & Err.Number & vbCr & Err.Description
End If
Application.ScreenUpdating = True
End Sub
Sub Loesch()
Dim wkb As Workbook
Application.ScreenUpdating = False
For Each wkb In Workbooks
If wkb.Name ThisWorkbook.Name And UCase(wkb.Name) „PERSONL.XLS“ Then
wkb.Close savechanges:=False
End If
Next wkb
Application.ScreenUpdating = True
End Sub
Das Ergebnis ist leider noch nicht „perfekt“, denn ich habe das Gefühl, dass die Funktion „Text in Spalten“ nicht richtig ausgeführt wird.
Das Ergenis ist nämlich folgendermaßen:
Alle Datensätze sind in einer Spalte zusammengefasst.
AUSSER es ist ein Komma in einem Datensatz, dann wird getrennt und in einer neuen Spalte weitergemacht.
Das verstehe ich gar nicht, ich dacht Format=4 (Semikolon)??? würde das schon berücksichtigen. Und wenn ich die CSV-Dateien einzeln mit Excel öffne, funktioniert es ja einwandfrei (Tabellenblatt mit 2 Zeilen und jeweiligen Spalten).
Und es fehlen mir noch die Feldnamen in Zeile 1, logo, aber ich habe halt null Plan von VB…
Kann mir jemand dazu noch einen Tipp geben? Das wäre echt prima!
Vielen Dank und viele Grüße
Dirk