Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA: CSV importieren mit Unicode / UTF-8

VBA: CSV importieren mit Unicode / UTF-8
20.08.2019 11:40:09
Hundepriester
Hallo,
ich habe ein Makro mit dem ich eine CSV Datei importiere und bearbeite. Die Umlaute werden leider nicht korrekt importiert.
Beispiel:
Anstatt "ü" wird "ü" angezeigt.
Anstatt "ö" wird "ö" angezeigt.
Der Code öffnet die CSV, separiert die CSV anhand von Kommata und importiert dann bestimmte Werte.
Lösungen:
Ich habe einige Lösungen gefunden, die passen aber alle nicht zu meinem Code. Ich würde ungern den kompletten Datenimport anders machen. Hat jemand vielleicht eine Idee, wie ich hier weiterkomme?
Aktueller Code:

Sub DatenBesorgen()
'Daten aus der CSV in die Excel kopieren
Dim DateiName As String
Dim ReplacePrep As String
DateiName = "C:\*****.csv"
Open DateiName For Input As #1
row_number = 10
Do Until EOF(1)
Line Input #1, LineFromFile
LineItems = Split(LineFromFile, ",")
Worksheets("Tabelle1").Cells(row_number, 1).Value = LineItems(3)
Worksheets("Tabelle1").Cells(row_number, 2).Value = LineItems(5)
Worksheets("Tabelle1").Cells(row_number, 3).Value = LineItems(6)
Worksheets("Tabelle1").Cells(row_number, 4).Value = LineItems(7)
row_number = row_number + 1
Loop
Close #1
End Sub

Vielen Dank für Hilfe! Bitte beachten, dass ich kein VBA Profi bin :)
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: CSV importieren mit Unicode / UTF-8
20.08.2019 12:31:44
peterk
Hallo
Du müsstest das FileSystemObject benutzen
Sub DatenBesorgen()
'Daten aus der CSV in die Excel kopieren 
    Dim DateiName As String
    Dim ReplacePrep As String
    Dim LineFromFile As String
    Dim LineItems As Variant
    Dim row_number As Long
    
    Dim objFSO As Object
    Dim objText As Object

    DateiName = "C:\*****.csv"

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objText = objFSO.OpenTextFile(DateiName, 1, , -2)

    row_number = 10
    
    Do Until objText.AtEndOfStream                'Gesammtes TextDok durchgehen 
        LineFromFile = objText.ReadLine     'Zeile aus Quelldatei einlesen 
        LineItems = Split(LineFromFile, ",")

        Worksheets("Tabelle1").Cells(row_number, 1).Value = LineItems(3)
        Worksheets("Tabelle1").Cells(row_number, 2).Value = LineItems(5)
        Worksheets("Tabelle1").Cells(row_number, 3).Value = LineItems(6)
        Worksheets("Tabelle1").Cells(row_number, 4).Value = LineItems(7)

        row_number = row_number + 1

    Loop
    objText.Close
End Sub

Anzeige
AW: VBA: CSV importieren mit Unicode / UTF-8
20.08.2019 12:52:41
Hundepriester
Hallo peterk,
habe den Code genau so umgesetzt. Lief auch Fehlerfrei durch, leider sind Umlaute und andere Sonderzeichen weiterhin falsch.
"ü" = ü etc.
Muss ich noch etwas machen, damit das mit dem FileSystemObject funktioniert?
/Noch als Hinweis: Ich nutze Office16, konnte das bei der Threaderstellung aber nicht auswählen.
Danke schon mal für deine Mühen!
Anzeige
AW: VBA: CSV importieren mit Unicode / UTF-8
20.08.2019 13:45:43
Martin
Hallo peterk,
dversuche es mal so:
https://stackoverflow.com/questions/15151128/read-large-file-line-by-line-with-ado-stream/15166865
Viele Grüße
Martin
AW: VBA: CSV importieren mit Unicode / UTF-8
20.08.2019 13:57:40
Hundepriester
Hi Martin,
danke für den Hinweis. Über den Thread war ich schon gestolpert, ich habe keine Ahnung was "ADO Stream" ist. Auch, wie und an welcher Stelle ich das dann anwende ist mir unklar.
Ich freue mich, wenn du mir da etwas genauer antworten kannst! :)
Als Hinweis noch:
Hundepriester ist der Fragesteller (ich)
Peterk hatte schon eine Antwort gepostet
Anzeige
AW: VBA: CSV importieren mit Unicode / UTF-8
20.08.2019 13:58:32
Hundepriester
Häkchen setzen da Frage noch nicht beantwortet (Muss ich das Häkchen setzen oder kann man das auch editieren!?)
AW: VBA: CSV importieren mit Unicode / UTF-8
20.08.2019 14:03:39
peterk
Hallo
Versuch mal die Zeile

Set objText = objFSO.OpenTextFile(DateiName, 1, , -2)
auf

Set objText = objFSO.OpenTextFile(DateiName, 1, , -1)
zu ändern. Wenn das auch nicht hilft, schick mir Bitte einen Kurzen Ausschnitt deiner CSV Datei
Anzeige
AW: VBA: CSV importieren mit Unicode / UTF-8
20.08.2019 14:48:14
Hundepriester
Hallo,
habe das versucht, leider ohne Erfolg.
Getestet mit:
-2: Import klappt, aber Umlaute falsch
-1: Laufzeitfehler 9
0: Import klappt, aber Umlaute falsch
Hier die CSV - habe eine .txt draus gemacht
https://www.herber.de/bbs/user/131526.txt
Ich vermute, es liegt an den Anführungszeichen - die kann ich leider nicht beeinflussen.
Danke und VG!
Anzeige
AW: VBA: CSV importieren mit Unicode / UTF-8
20.08.2019 15:01:34
Günther
Moin,
ich habe die *.txt eben einmal mit Power Query, -> http://www.excel-ist-sexy.de/power-query-das-add-in/ importiert, UTF-8 als Zeichencode gewählt und alles ist gut ... :-)
Gruß
Günther
AW: VBA: CSV importieren mit Unicode / UTF-8
21.08.2019 12:44:07
hundepriester
Hallo Günther,
danke für den Hinweis. Das funktioniert zwar, ich möchte sowas aber ja eben NICHT manuell machen ;)
Danke trotzdem, eine Lösung habe ich ja nun!
Anzeige
AW: VBA: CSV importieren mit Unicode / UTF-8
20.08.2019 15:07:30
peterk
Hallo
Ich hatte eine Denkfehler: Im FileSystemObject kann nur zwischen UNICODE und ANSI unterschieden werden, für UTF brauchen wir ADO
Sub DatenBesorgen()
'Daten aus der CSV in die Excel kopieren 
    Dim DateiName As String
    Dim ReplacePrep As String
    Dim LineFromFile As String
    Dim LineItems As Variant
    Dim row_number As Long

    Dim objStream As Object

    DateiName = "C:\Users\ich\Documents\Herber\131526.txt"

    Set objStream = CreateObject("ADODB.Stream")
    objStream.Charset = "utf-8"
    objStream.Open
    objStream.LoadFromFile (DateiName)

    row_number = 10

    Do Until objStream.EOS                       'Gesammtes TextDok durchgehen 
        LineFromFile = objStream.ReadText(-2)    'Zeile aus Quelldatei einlesen 
        LineItems = Split(LineFromFile, ",")

        Worksheets("Tabelle1").Cells(row_number, 1).Value = LineItems(3)
        Worksheets("Tabelle1").Cells(row_number, 2).Value = LineItems(5)
        Worksheets("Tabelle1").Cells(row_number, 3).Value = LineItems(6)
        Worksheets("Tabelle1").Cells(row_number, 4).Value = LineItems(7)

        row_number = row_number + 1

    Loop
    Set objStream = Nothing

End Sub

Anzeige
AW: VBA: CSV importieren mit Unicode / UTF-8
21.08.2019 12:42:41
hundepriester
Klasse! Das hat geklappt.
Vielen Dank! :)
;

Forumthreads zu verwandten Themen

Anzeige
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

VBA zur korrekten CSV-Importierung mit UTF-8


Schritt-für-Schritt-Anleitung

Um eine CSV-Datei mit UTF-8-Codierung in Excel mittels VBA korrekt zu importieren, befolge diese Schritt-für-Schritt-Anleitung:

  1. Öffne den VBA-Editor in Excel (ALT + F11).
  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject" -> Einfügen -> Modul.
  3. Füge den folgenden Code ein:
Sub DatenBesorgen()
    'Daten aus der CSV in die Excel kopieren
    Dim DateiName As String
    Dim LineFromFile As String
    Dim LineItems As Variant
    Dim row_number As Long
    Dim objStream As Object

    DateiName = "C:\*****.txt"  ' Pfad zur CSV-Datei anpassen

    Set objStream = CreateObject("ADODB.Stream")
    objStream.Charset = "utf-8"  ' Setze das Charset auf UTF-8
    objStream.Open
    objStream.LoadFromFile (DateiName)

    row_number = 10  ' Startreihe in Excel

    Do Until objStream.EOS
        LineFromFile = objStream.ReadText(-2)  ' Zeile aus Quelldatei einlesen
        LineItems = Split(LineFromFile, ",")  ' CSV-Zeilen anhand von Kommas separieren

        Worksheets("Tabelle1").Cells(row_number, 1).Value = LineItems(3)
        Worksheets("Tabelle1").Cells(row_number, 2).Value = LineItems(5)
        Worksheets("Tabelle1").Cells(row_number, 3).Value = LineItems(6)
        Worksheets("Tabelle1").Cells(row_number, 4).Value = LineItems(7)

        row_number = row_number + 1
    Loop

    Set objStream = Nothing  ' Stream-Objekt freigeben
End Sub
  1. Passe den Pfad zur CSV-Datei an und ändere die Zelle, wo die Daten gespeichert werden sollen, falls nötig.
  2. Starte das Makro (F5), um die CSV-Datei zu importieren.

Häufige Fehler und Lösungen

  • Umlaute werden falsch angezeigt: Stelle sicher, dass die CSV-Datei tatsächlich im UTF-8-Format gespeichert ist. Verwende Notepad++ oder einen anderen Texteditor, um die Codierung zu überprüfen und gegebenenfalls zu ändern.

  • Laufzeitfehler 9: Dieser Fehler tritt häufig auf, wenn das angegebene Arbeitsblatt ("Tabelle1") nicht existiert. Überprüfe den Namen des Arbeitsblatts.

  • CSV-Datei wird nicht gefunden: Überprüfe den Dateipfad auf Tippfehler und stelle sicher, dass die Datei existiert.


Alternative Methoden

Eine weitere Methode, um CSV-Dateien zu importieren, ist die Verwendung von Power Query. Dies kann besonders nützlich sein, wenn Du regelmäßig mit CSV-Dateien arbeitest und eine Benutzeroberfläche bevorzugst.

  • Öffne Power Query: Gehe zu "Daten" -> "Daten abrufen" -> "Aus Datei" -> "Aus Text/CSV".
  • Wähle die Datei aus und stelle sicher, dass du "UTF-8" als Zeichencodierung wählst.

Praktische Beispiele

Hier sind einige Beispiele für die Verwendung von VBA zum Importieren von CSV-Dateien:

  1. Importieren mit UTF-8: Verwende das oben genannte Beispiel, um Daten aus einer UTF-8-kodierten CSV-Datei zu importieren.

  2. Anpassung für Excel-Versionen: Der oben angegebene Code funktioniert mit Excel 2016 und späteren Versionen. Bei älteren Versionen kann es notwendig sein, Anpassungen vorzunehmen.


Tipps für Profis

  • Verwende den ADO.Stream-Ansatz, um große Dateien effizient zu verarbeiten, anstatt Line Input, da dies die Ladezeiten verkürzen kann.

  • Error Handling: Implementiere Fehlerbehandlung in deinem Code, um unerwartete Probleme beim Importieren zu vermeiden. Zum Beispiel:

On Error GoTo ErrorHandler
' Dein Importcode hier
Exit Sub

ErrorHandler:
MsgBox "Ein Fehler ist aufgetreten: " & Err.Description
  • Teste den Code mit verschiedenen CSV-Dateien, um sicherzustellen, dass er robust ist und mit verschiedenen Formaten umgehen kann.

FAQ: Häufige Fragen

1. Warum werden Umlaute in meiner CSV-Datei falsch angezeigt? Die falsche Anzeige von Umlauten kann durch eine falsche Zeichencodierung der CSV-Datei verursacht werden. Stelle sicher, dass die Datei im UTF-8-Format gespeichert ist.

2. Was ist der Unterschied zwischen UTF-8 und ANSI? UTF-8 ist eine Codierung, die alle Unicode-Zeichen unterstützt, während ANSI nur eine begrenzte Anzahl von Zeichen unterstützt, was zu Problemen bei der Anzeige von Sonderzeichen führen kann.

3. Wie kann ich sicherstellen, dass mein VBA-Code mit verschiedenen Excel-Versionen funktioniert? Testen Sie Ihren Code in verschiedenen Versionen von Excel, insbesondere in den Versionen, die Ihre Zielgruppe verwendet. Achte darauf, alle verwendeten Funktionen und Objekte zu überprüfen.

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