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

Formatierungsproblem beim Einlesen von csv-Dateien

Formatierungsproblem beim Einlesen von csv-Dateien
24.06.2015 21:48:21
Hornung

Hallo zusammen,
ich habe mir folgenden Code "gebastelt", der mir effektiv
1. eine *.csv-Datei einliest
2. diese so formatiert, dass mehrere Spalten entstehen (anstatt zuvor durch Komma getrennt in einer Spalte)
3. das Ganze in eine Datei "eingelesen.xls" im selben Dateipfad kopiert.
Das klappt alles soweit. Jetzt habe ich aber das Problem, dass die einzulesenden *.csv-Dateien Spalten im Format "12.123" hat.
Mit meinem aktuellen Code wandelt Excel (vermutlich wegen der Formatierung "Standard" und nicht "Text") das ganze in eine unbrauchbare Zahl um.
Leider komme ich überhaupt nicht weiter, wie ich das lösen soll.
Mögliche Lösungsansätze meinerseits (die ich leider mit meinem VBA-Wissen nicht schaffe umzusetzen):
- ausgewählte *.csv-Datei zunächst so formatieren, dass alle "," = ";" und "." = ","
- generierte *.txt-Datei so formatieren, dass alle "," = ";" und "." = "," (wäre für mich vermutlich besser)

Sub einlesen()
Dim wb As Workbook, wks As Worksheet, wbAktiv As Workbook, wksAktiv As Worksheet
Dim rngZelle As Range
Dim strVerzeichnis As String
Dim Dateiname As Variant, DateinameTXT As String
ChDrive "E"
ChDir "E:\...\simu26"
Dateiname = Application.GetOpenFilename(fileFilter:="CSV (*.csv), *.csv")
If Dateiname = False Then Exit Sub
strVerzeichnis = VBA.CurDir
Set wbAktiv = ActiveWorkbook
Set wksAktiv = ActiveSheet
Set rngZelle = Worksheets("Tabelle1").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
Application.ScreenUpdating = False
VBA.FileCopy Source:=Dateiname, Destination:=Left(Dateiname, Len(Dateiname) - 3) & "txt" _
DateinameTXT = Left(Dateiname, Len(Dateiname) - 3) & "txt"
Application.Workbooks.OpenText Filename:=DateinameTXT, Origin:=xlWindows, _
StartRow:=1, _
DataType:=xlDelimited, ConsecutiveDelimiter:=False, _
Tab:=False, _
Semicolon:=False, _
Comma:=True, _
Space:=False, _
Other:=False
Set wb = ActiveWorkbook
wb.Sheets(1).UsedRange.Copy
rngZelle.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Set rngZelle = rngZelle.Offset(wb.Sheets(1).UsedRange.Rows.Count, 0)
wb.Close savechanges:=False
VBA.Kill (DateinameTXT)
Application.ScreenUpdating = True
ActiveSheet.Copy
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:="E:\...\simu26\eingelesen", FileFormat:=xlOpenXMLWorkbook
Application.DisplayAlerts = True
Application.DisplayAlerts = False
Application.Quit
End Sub


Ich wäre euch wirklich sehr dankbar, wenn ihr mir helfen könntet!
LG Marcel

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Formatierungsproblem beim Einlesen von csv-Dateien
25.06.2015 12:31:19
Michael
Hi Marcel,
wenn Du den Textimport händisch ausführst, gibt es irgendwo einen Button "Optionen", der zu einem Unterdialog führt, wo man das "Dezimalzeichen" einstellen kann, halt ob man "." oder "," hat.
Das Ganze mit Makrorekorder aufgezeichent und in Deinen Code eingefügt, sollte eigentlich tun: da werden dann nämlich viel mehr Optionen mit ausgegeben.
Relevat ist die Zeile: .TextFileDecimalSeparator = "."
Schöne Grüße,
Michael

AW: Formatierungsproblem beim Einlesen von csv-Dateien
25.06.2015 18:10:57
Hornung
Hallo,
vielen Dank für deine Antwort!
Der Makro-Recorder spuckt mir folgendes aus:
With Application
.DecimalSeparator = "."
.ThousandsSeparator = ","
End With

Ich habe die Zeilen jetzt so in den Code kopiert, dass dieser Teil für den ganzen Code gültig ist (also "with appliation" an den Anfang und "End with" ganz ans Ende).
Sonst wüsste ich nicht, wohin damit (hab leider noch nicht so den Durchblick bei VBA :/ )
Jetzt funktioniert die Aufteilung auf mehrere Spalten aber leider nicht mehr und das Problem mit der falschen Formatierung konnte ich so leider auch nicht lösen.
Kannst du mir vielleicht genau sagen, wohin damit oder was es noch an Möglichkeiten gäbe?
Viele Grüße
Marcel

Anzeige
AW: Formatierungsproblem beim Einlesen von csv-Dateien
25.06.2015 19:49:00
Michael
Hi Marcel,
Du hast ja jetzt *zweimal* das Komma verwertet, einmal als Spaltentrenner und einmal als Tausendertrennzeichen. Mach mal: .ThousandsSeparator=" "
Ansonsten poste bitte nochmal das ganze Ding,
schöne Grüße,
Michael

AW: Formatierungsproblem beim Einlesen von csv-Dateien
25.06.2015 21:43:11
Hornung
Hat mit deinem Vorschlag doch geklappt!
Hab da wohl erst was falsch gemacht.
Danke noch einmal und viele Grüße!
Marcel

AW: Formatierungsproblem beim Einlesen von csv-Dateien
25.06.2015 21:52:49
Hornung
Also hätte sogar auch mit dem "," geklappt, aber macht wohl trotzdem mehr Sinn das rauszunehmen.
Danke für den Tipp!
Eine Frage hätte ich noch: Warum kopiert der Code die Tabelle in die zweite Zeile abwärts vom erstellten Dokument? Kann nicht erkennen, warum das so ist bzw. wie ich es ändern kann (also, dass es direkt in die erste Zeile abwärts kopiert wird).

Sub einlesen()
With Application
.DecimalSeparator = "."
.ThousandsSeparator = ""
Dim wb As Workbook, wks As Worksheet, wbAktiv As Workbook, wksAktiv As Worksheet
Dim rngZelle As Range
Dim strVerzeichnis As String
Dim Dateiname As Variant, DateinameTXT As String
ChDrive "E"
ChDir "E:\...\"
Dateiname = Application.GetOpenFilename(fileFilter:="CSV (*.csv), *.csv")
If Dateiname = False Then Exit Sub
strVerzeichnis = VBA.CurDir
Set wbAktiv = ActiveWorkbook
Set wksAktiv = ActiveSheet
Set rngZelle = Worksheets("Tabelle1").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
Application.ScreenUpdating = False
VBA.FileCopy Source:=Dateiname, Destination:=Left(Dateiname, Len(Dateiname) - 3) & "txt"  _
_
DateinameTXT = Left(Dateiname, Len(Dateiname) - 3) & "txt"
Application.Workbooks.OpenText Filename:=DateinameTXT, Origin:=xlWindows, _
StartRow:=1, _
DataType:=xlDelimited, ConsecutiveDelimiter:=False, _
Tab:=False, _
Semicolon:=False, _
Comma:=True, _
Space:=False, _
Other:=False
Set wb = ActiveWorkbook
wb.Sheets(1).UsedRange.Copy
rngZelle.PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False
Set rngZelle = rngZelle.Offset(wb.Sheets(1).UsedRange.Rows.Count, 0)
wb.Close savechanges:=False
VBA.Kill (DateinameTXT)
Application.ScreenUpdating = True
ActiveSheet.Copy
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:="E:\...\eingelesen", FileFormat:=xlOpenXMLWorkbook
Application.DisplayAlerts = True
Application.DisplayAlerts = False
Application.Quit
End With
End Sub

Viele Grüße
Marcel

Anzeige
AW: Formatierungsproblem beim Einlesen von csv-Dateien
26.06.2015 14:44:24
wenn die aktuelle Variante tut, lösche doch einfach am Ende des Codes die erste Zeile...
Hi Marcel,
das kann ich jetzt auch nicht nachvollziehen.
Das mit dem Tausendertrennzeichen hatte ich übrigens hier nachgesehen:
https://www.herber.de/forum/archiv/1428to1432/1430780_Auswertung_von_mehreren_Dateien_mit_VBA.html#1430780
Sepp macht das mit einer Query; vielleicht schaust Du es Dir mal an, da kann man auch den range angeben, wo die Ausgabe hinsoll.
Ich verstehe übrigens nicht den Sinn, quasi die komplette Prozedur in ein With zu klammern; nach meinem Dafürhalten gehören die zwei Anweisen in den Block von .Opentext, siehe hier:
https://www.herber.de/mailing/vb/html/xlmthopentext.htm
Schöne Grüße,
Michael

Anzeige
AW: Formatierungsproblem beim Einlesen von csv-Dateien
28.06.2015 16:37:59
Hornung
Danke dir Michael!

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige