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

CSV einlesen per Makro geht nicht richtig

CSV einlesen per Makro geht nicht richtig
Cello
Hallo Leute.
Ich habe seit einiger Zeit n kleines Problem mit dem einlesen einer CSV-Datei über ein Makro in Excel. Die Datenbank aus der ich die CSV-Datei erhalten habe wurde durch eine andere ersetzt und in dem Zuge wurde auch der Inhalt der CSV ein klein wenig geändert. Ich habe in der ZIP-Datei einen kleinen Auszug der CSV, die heisst "Original_CSV_Datei.csv". Die richtigen Dateien sind bis zu 1000 Zeilen lang. Die Trennung der einzelnen Felder erfolgt durch ein Semikolon. Das neue an dieser CSV, durch die Umstellung der Datenbank, ist, das bei den letzten beiden Spalten vor den Zahlen mehrere Leerzeichen sind. Eigentlich ja kein Problem denkt man sich. Wenn ich in Excel die Datei öffne und bei Text in Spalten als Trennzeichen das Semikolon auswähle, muss das ja klappen.
Jetzt allerdings zu der Sache, die ich nicht kapiere. Wenn ich in Excel (manuell also kein Makro) "Datei öffnen" sage und diese CSV-Datei auswähle kommt erst gar nicht das Fenster mit dem Textkonvertierungsassistenten. Es wird die Datei gleich in Excel geöffnet und automatisch getrennt. Dazu habe ich in der angehängten ZIP-Datei die Datei "Manuell_geöffnet.xls" eingefügt. Wie man sehen kann, wird das korrekt in Excel umgesetzt und bei den Semikolon getrennt. Wunderbar eigentlich. Wenn ich allerdings dieselbe Datei über mein Makro in Excel bringen will, wird diese total anders eingelesen, wie man aus der Datei "Mit_Makro_eingelesen.xls" in der ZIP-Datei sehen kann. Es wird nicht nach Semikolon getrennt sondern anscheinend nach Komma und Leerzeichen. Hier mal der Code wie ich die Datei per Makro einlese. Die Datei wird allerdings schon automatisch getrennt (siehe obrig genannte Datei "Mit_Makro_eingelesen.xls") bevor das Makro bei der Zeile "Selection.TextToColumns....." angelangt ist.
Sub CSV_Wert_einlesen()
neuDatei = Application.GetOpenFilename("CSV-Datei,*.csv")
If neuDatei = False Then Exit Sub
Workbooks.Open Filename:=neuDatei
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
:=Array(Array(1, 2), Array(2, 2), Array(3, 2), Array(4, 2), Array(5, 2)), _
TrailingMinusNumbers:=True
Range("A:A").Select
Selection.Delete Shift:=xlToLeft
Ich habe deswegen auch schon gegoogelt aber so richtig zufriedenstellende Antworten habe ich nicht gefunden. Einige haben geschrieben, das sich Excel bei vielen gleichaussehnden CSV-Dateien irgendwann merkt welche Trennzeichen genutzt werden und das dann automatisch macht. Wenn das stimmt, wie kann ich diese Automatik abschalten?
Desweiteren, verstehe ich auch nicht, warum Excel die Daten so komisch trennt, wenn ich das per Makro einlesen will, also nach Komma und/oder Leerzeichen obwohl ich ihm das gar nicht sage.
Komischerweise erledigt sich dieses Problem mit dem einlesen wenn ich die CSV-Datei einfach umbenenne in *.txt . Dann funzt das wieder.
Sorry für das viele Geschreibe und ich hoffe, das man einigermaßen versteht was ich will, aber wenn mir jemand sagen kann, was ich falsch mache beim einlesen der CSV-Datei bzw. wie ich Excel abgewöhnen kann die CSV-Datei automatisch zu trennen, wäre ich dankbar.
MfG Marcel
https://www.herber.de/bbs/user/67326.zip

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Benutzer
Anzeige
alternative Methode
20.01.2010 09:50:41
Rudi
Hallo,
ich mach das so:
Sub tt()
Dim strTmp, arrDaten, arrTmp, i As Long, j As Integer
Const sFile As String = "c:\test\Original_CSV_Datei.csv"
Open sFile For Input As #1
strTmp = Split(Input(LOF(1), 1), vbCrLf)
Close 1
arrTmp = Split(strTmp(0), ";")
ReDim arrDaten(1 To UBound(strTmp) + 1, 1 To UBound(arrTmp) + 1)
For i = 0 To UBound(strTmp)
arrTmp = Split(strTmp(i), ";")
For j = 0 To UBound(arrTmp)
arrDaten(i + 1, j + 1) = arrTmp(j)
Next
Next
With Workbooks.Add.Sheets(1)
.Cells(1, 1).Resize(UBound(arrDaten), UBound(arrDaten, 2)) = arrDaten
.Columns.AutoFit
End With
End Sub

Gruß
Rudi
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige