Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: CSV Export im UTF 8 Format

CSV Export im UTF 8 Format
15.08.2019 16:52:07
ferris76
Hallo zusammen,
ich hoffe Ihr könnt mir weiterhelfen. Für eine Dateneingabe in Excel habe ich mir verschiedene Makros im Internet zusammengesucht, die für sich jeweils alleine genommen ihre Aufgabe erfüllen.
Als erstes werden die erfassen Daten per Button und Makro in ein anderes Tabellenblatt geschrieben:
Sub Schaltfläche4_KlickenSieAuf()
Worksheets("CSV").Rows("2:11").Insert shift:=xlDown
Range("A34:AU43").Copy
Worksheets("CSV").Range("A2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End Sub
Als zweites lösche ich über ein weiteres Makro die nicht benötigten Leerzeilen:
Sub Leerzeilen_loeschen()
Dim lngSpalte As Long
'** Spalte, die auf Leerzeichen geprüft werden soll
lngSpalte = 1
For A = Worksheets("CSV").Cells(Rows.Count, lngSpalte).End(xlUp).Row To 1 Step -1
If Worksheets("CSV").Cells(A, 1).Value = "" Then
Rows(A).Delete shift:=xlUp
End If
Next A
End Sub
Und als drittes sollen dann die Daten als CSV im UTF8 Format gespeichert werden. Das erledigt folgendes Makro:
Sub SaveUTF8File()
Dim fname As Variant
fname = Application.GetSaveAsFilename("UTF8.csv", "CSV-Dateien,*.csv,Alle Dateien,*.*")
If fname = False Then Exit Sub
SaveAsUTF8CSV (fname)
End Sub
Sub SaveAsUTF8CSV(fname As String)
Dim hfile As Integer ' Filehandle bzw. Dateinummer
Dim i As Long ' Zähler über alle Zeilen
Dim j As Integer ' Zähler über alle Spalten
Dim OneLine As String ' Eine Zeile als String
Dim maxcol As Integer ' max. Anzahl an Spalten
hfile = FreeFile
maxcol = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column
Open fname For Output As #hfile
Print #hfile, Chr(&HEF); Chr(&HBB); Chr(&HBF);
For i = 1 To ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
OneLine = ""
For j = 1 To maxcol - 1
OneLine = OneLine & Cells(i, j).Text & ","
Next j
OneLine = OneLine & Cells(i, j).Text & vbCrLf
Print #hfile, GetUTF8String(OneLine);
Next i
Close #hfile
End Sub
'
' frei nach http://www.vovisoft.com/unicode/UniFunctions.htm#ToUTF8
'

Private Function GetUTF8String(s As String) As String
Dim i As Integer  ' Zähler über die einzelnen Zeichen des utf16-Strings
Dim utf16 As Long, uc(2) As Byte
GetUTF8String = ""
For i = 1 To Len(s)
utf16 = AscW(Mid(s, i, 1))
If utf16 

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
End Sub

Ich habe jetzt Daten eingegeben und jeweils immer abgespeichert. Dabei ist nach dem Löschen der überflüssigen Leerzeilen ein Tabellenblatt mit 140 Zeilen übriggeblieben. Wenn diese jetzt versuche als CSV abzuspeichern, bricht die Datei entweder bei Zeile 44 ab oder es wird ein Überlauf (Fehler 6) produziert, die Datei enthält aber immer noch nicht alle Daten und ist knappe 1,7 MB groß. Kann mir jemand weiterhelfen?
Gruß
ferris76
Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CSV Export im UTF 8 Format
15.08.2019 17:07:29
onur
Der Code alleine bringt nicht viel, da man nix testen oder debuggen kann.
AW: CSV Export im UTF 8 Format
15.08.2019 18:45:56
Martin
Hallo ferris76,
verwende besser das "File System Object", damit kannst du auch (per "WriteLine") zeilenweise in die Textdatei schreiben und die einmalige Angabe CharSet = "utf-8" erspart dir nervige VBA-Konvertierungskonstrukte.
Hier findest du eine Anleitung:
https://developer.rhino3d.com/guides/rhinoscript/read-write-utf8
Viele Grüße
Martin
Anzeige
AW: CSV Export im UTF 8 Format
15.08.2019 19:02:24
onur
Dumme Frage: Welches Blatt willst du exportieren?
AW: CSV Export im UTF 8 Format
15.08.2019 19:15:41
onur
Wenn es Blatt "CSV" ist, wie ich vermute und der Button sich auf Sheet "Artikel" befindet - wieso steht dann:
For i = 1 To ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row

und nicht
For i = 1 To Sheets("CSV").Cells.SpecialCells(xlCellTypeLastCell).Row

im Code?
Anzeige
AW: CSV Export im UTF 8 Format
15.08.2019 19:17:02
onur
Das Selbe gilt für:
maxcol = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column

AW: CSV Export im UTF 8 Format
15.08.2019 19:30:09
ferris76
Ja, bezieht sich auf das Blatt CSV. Naja ich sage mal so, so gut kenne ich mich mit vba dann doch nicht aus, um solche Punkte zu erkennen :-). Deswegen bin ich ja hier, da es an sich funktioniert nur nicht mit mehr Daten.
Anzeige
AW: CSV Export im UTF 8 Format
15.08.2019 19:30:55
onur
Ändere das, dan läuft es.
AW: CSV Export im UTF 8 Format
15.08.2019 19:44:19
ferris76
Das hatte ich schon versucht, bin aber auch auf das selbe Problem gestoßen. Wahrscheinlich habe ich nicht überall den richtigen Pfad gesetzt. Tja jetzt geht es, aber die Datei wird echt groß, da irgendwie alle Zeilen und Spalten mit gespeichert werden. Irgendeine Idee dazu, wie man das verhindern kann?
Anzeige
AW: CSV Export im UTF 8 Format
15.08.2019 21:07:14
ferris76
Mit deiner Anmerkung zum Code hast du Recht. Ich hatte hier aber vergeblich nach einem Programm gesucht, das vernünftig UTF8 und csv abspeichert. Entweder funktionierte das eine oder das andere nicht richtig.
Aber, hey vielen Dank so funktioniert es. Wenn ich den Code richtig verstehe, begrenzt du die Anzahl der Spalten und zählst die Zeilen oder?
Anzeige
AW: CSV Export im UTF 8 Format
15.08.2019 22:28:16
onur
Wieso ich, dein Code war doch so (wenn auch fehlerhaft mit falscher Anzahl von Spalten und Zeilen).
Nach der ersten Korrektur erst kamen diese Fehler zum Vorschein (deswegen wurde die Datei so riesig) und ich habe sie auch korrigiert.
AW: CSV Export im UTF 8 Format
15.08.2019 19:44:00
onur
"An sich funktioniert" ? - Offen sichtlich ja nicht - knapp daneben ist doch auch vorbei
Nix für Ungut, aber du solltest nicht Code benutzen/verändern, den du nicht vollständig verstehst (im Internet gibt es auch für Anfänger genug Recherchemöglichkeiten).
Sonst ist es so wie bei "Jurassic Park", wo die "Wissenschaftler" Gensequenzen verwenden und manipulieren, ohne sie wirklich zu verstehen und sich wundern, wenn was Anderes dabei herauskommt, als sie geplant hatten.
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

CSV Export im UTF 8 Format


Schritt-für-Schritt-Anleitung

  1. Daten in ein anderes Tabellenblatt schreiben: Verwende das folgende Makro, um deine Daten in das Blatt "CSV" zu kopieren.

    Sub Schaltfläche4_KlickenSieAuf()
       Worksheets("CSV").Rows("2:11").Insert shift:=xlDown
       Range("A34:AU43").Copy
       Worksheets("CSV").Range("A2").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
    End Sub
  2. Leerzeilen löschen: Dieses Makro entfernt überflüssige Leerzeilen.

    Sub Leerzeilen_loeschen()
       Dim lngSpalte As Long
       lngSpalte = 1
       For A = Worksheets("CSV").Cells(Rows.Count, lngSpalte).End(xlUp).Row To 1 Step -1
           If Worksheets("CSV").Cells(A, 1).Value = "" Then
               Rows(A).Delete shift:=xlUp
           End If
       Next A
    End Sub
  3. CSV im UTF-8 Format speichern: Nutze folgendes Makro, um die Daten als CSV im UTF-8 Format zu speichern.

    Sub SaveUTF8File()
       Dim fname As Variant
       fname = Application.GetSaveAsFilename("UTF8.csv", "CSV-Dateien,*.csv,Alle Dateien,*.*")
       If fname = False Then Exit Sub
       SaveAsUTF8CSV (fname)
    End Sub
    
    Sub SaveAsUTF8CSV(fname As String)
       Dim hfile As Integer
       Dim i As Long
       Dim j As Integer
       Dim OneLine As String
       Dim maxcol As Integer
    
       hfile = FreeFile
       maxcol = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Column
       Open fname For Output As #hfile
       Print #hfile, Chr(&HEF); Chr(&HBB); Chr(&HBF);
       For i = 1 To ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
           OneLine = ""
           For j = 1 To maxcol - 1
               OneLine = OneLine & Cells(i, j).Text & ","
           Next j
           OneLine = OneLine & Cells(i, j).Text & vbCrLf
           Print #hfile, GetUTF8String(OneLine);
       Next i
       Close #hfile
    End Sub
  4. UTF-8 String Konvertierung: Diese Funktion konvertiert Strings in das UTF-8 Format.

    Private Function GetUTF8String(s As String) As String
       Dim i As Integer
       Dim utf16 As Long, uc(2) As Byte
       GetUTF8String = ""
       For i = 1 To Len(s)
           utf16 = AscW(Mid(s, i, 1))
           ' weitere Konvertierungscode hier
       Next i
    End Function

Häufige Fehler und Lösungen

  • Überlauf (Fehler 6): Dieser Fehler kann auftreten, wenn die Anzahl der Datenzeilen größer ist, als die Schleife verarbeiten kann. Überprüfe die Anzahl der Zeilen und Spalten in deinem Code.

  • CSV bricht ab: Wenn der Export bei einer bestimmten Zeile abbricht, stelle sicher, dass alle Daten korrekt in das Blatt "CSV" geschrieben wurden und keine unerwarteten Leerzeilen vorhanden sind.


Alternative Methoden

Eine Alternative zu VBA ist die Verwendung von Power Query, das dir erlaubt, CSV-Dateien effizient zu importieren und zu exportieren. Du kannst deine Daten bereinigen und im UTF-8 Format speichern, ohne selbst viel Code schreiben zu müssen.


Praktische Beispiele

Wenn du beispielsweise eine große Datenmenge hast, die du als CSV im UTF-8 Format speichern möchtest, kannst du den obigen VBA-Code verwenden, um den Export zu automatisieren. Achte darauf, dass du das Blatt korrekt angibst, um Fehler zu vermeiden.


Tipps für Profis

  • File System Object verwenden: Anstatt die Daten zeilenweise zu drucken, kann die Verwendung des File System Objects die Handhabung von UTF-8 beim Speichern erheblich vereinfachen.

  • CharSet = "utf-8": Wenn du mit dem File System Object arbeitest, kannst du die Angabe von Charset = "utf-8" nutzen, um die Konvertierung zu umgehen.


FAQ: Häufige Fragen

1. Wie kann ich CSV in UTF-8 umwandeln?
Verwende den oben genannten VBA-Code, um deine Daten als CSV im UTF-8 Format zu speichern.

2. Warum funktioniert mein Excel VBA Code nicht?
Überprüfe, ob du die richtigen Blätter und Zellen referenzierst. Ein häufiger Fehler ist die Verwendung von ActiveSheet statt einer spezifischen Blatt-Referenz.

3. Was ist der Unterschied zwischen CSV und UTF-8?
CSV ist ein Dateiformat, während UTF-8 ein Zeichensatz ist. Das Speichern einer CSV-Datei im UTF-8 Format sichert die richtige Darstellung von Sonderzeichen.

4. Wo finde ich weitere Informationen zu Excel CSV Export im UTF-8 Format?
Schau dir Online-Ressourcen und Foren an, die sich mit Excel und VBA beschäftigen, um hilfreiche Tipps und Lösungen zu finden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige