TL;DR — Eine Textdatei zu lesen hat drei Werkzeuge.
Line Input #liest eine rohe Zeile in eine Zeichenfolge (Sie zerlegen sie selbst).Input #parst abgegrenzte Felder direkt in Variablen (nur sicher bei Dateien, dieWrite #erzeugt hat).Input(LOF(f), #f)liest die ganze Datei auf einmal. Schleifen Sie mitDo Until EOF(f)— prüfen SieEOFvor jedem Lesen, sonst laufen Sie über das Ende hinaus und treffenerror 62.
Dim n As Integer, line As String
n = FreeFile
Open "C:\data.txt" For Input As #n
Do Until EOF(n) ' VOR dem Lesen auf Ende pruefen
Line Input #n, line ' eine rohe Zeile in eine Zeichenfolge
Debug.Print line
Loop
Close #n
Sobald eine Datei auf einem Kanal offen ist, sieht das Zurücklesen trivial aus —
bis die Spalten durcheinander herauskommen oder die Schleife die letzte Zeile fallen lässt. Beide Probleme
rühren daher, den falschen Leser zu wählen. VBA gibt Ihnen drei, und sie sind nicht austauschbar: einer
reicht Ihnen die rohe Zeile, einer versucht, sie für Sie zu parsen, und einer liest alles auf einmal. Das
Handwerk besteht darin, den Leser darauf abzustimmen, wie die Datei geschrieben wurde — und zu wissen,
dass Input # und Write # ein zusammengehöriges Paar sind, ebenso wie Line Input # und Print #.
Was Sie lernen
- Das mentale Modell — drei Leser, und die falsche Wahl bringt Ihre Daten durcheinander
Line Input #— die rohe Zeile, die Sie selbst zerlegen (der sichere Standard)Input #— der Parser, der der Zwilling vonWrite #ist (und sich an einfacher CSV verschluckt)- Die
Do Until EOF()-Schleife und der Off-by-one, dererror 62auslöst Input(LOF(f), #f)— die ganze Datei in eine Zeichenfolge lesen- Wann eine CSV besser als Arbeitsmappe geöffnet wird, als sie von Hand zu parsen
Das mentale Modell: drei Leser, einer, der zu Ihrer Datei passt
Die Einsicht, die die meisten Lese-Bugs verhindert: der Leser muss dazu passen, wie die Datei geschrieben wurde.
Line Input #liest eine Zeile als rohe Zeichenfolge, Zeilenumbruch entfernt. Es parst nicht — Sie entscheiden, wie Sie sie zerlegen. Vorhersehbar, und es fehlinterpretiert Ihre Daten nie.Input #liest eine geparste Liste von Werten direkt in Variablen, mit denselben Anführungszeichen-und-Kommas-Regeln, dieWrite #schreibt. Es ist der genaue Zwilling vonWrite #.Input(LOF(f), #f)(die Funktion, nicht die Anweisung) liest die gesamte Datei in einem Aufruf in eine einzige Zeichenfolge.
So ergibt sich die Paarungsregel sofort: eine mit Write # geschriebene Datei wird mit Input # gelesen;
eine mit Print # (oder von irgendeinem anderen Programm) geschriebene Datei wird mit Line Input #
gelesen und von Ihnen zerlegt. Kreuzen Sie die Paare — füttern Sie eine einfache CSV an Input # —, und
die Felder landen in den falschen Variablen.
Line Input #: die rohe Zeile, die Sie selbst zerlegen
Line Input # ist das Arbeitspferd und der sichere Standard. Es liest genau eine Zeile in eine
Zeichenfolge, und was Sie als Nächstes tun, liegt bei Ihnen:
Dim parts() As String
Line Input #n, line
parts = Split(line, ",") ' SIE waehlen das Trennzeichen
Weil es nie parst, rät es nie falsch. Das eine, worauf man achten muss, ist, dass ein naives
Split(line, ",") auch Kommas zerlegt, die innerhalb eines gequoteten Feldes sitzen
("Rome, Italy" wird zu zwei Teilen). Wenn Ihre Daten gequotete Kommas haben, parsen Sie entweder die
Anführungszeichen richtig oder — gewöhnlich einfacher — lassen Sie es Excel tun, wie unten beschrieben.
Input #: der Zwilling von Write # (und warum es eine einfache CSV zerstört)
Input # liest geparste Werte direkt in typisierte Variablen:
Dim name As String, city As String, age As Long
Input #n, name, city, age ' erwartet "Ann","Rome",42 (Write #-Format)
Bei einer Datei, die Write # erzeugt hat, ist das perfekt und schnell — die Anführungszeichen sagen
Input #, wo jede Zeichenfolge beginnt und endet. Bei einer einfachen CSV (Ann,Rome,42) funktioniert
es meist noch, aber es bricht in dem Augenblick, in dem ein Feld ein nicht gequotetes Komma, einen
Apostroph oder ein verirrtes Anführungszeichen enthält: Felder verschieben sich, ein " beginnt eine
Zeichenfolge, die nie schließt, und der Rest der Zeile landet in den falschen Variablen. Deshalb ist
Input # nur bei Dateien sicher, die von Write # geschrieben wurden. Für alles andere ist Line Input #
plus Ihr eigenes Zerlegen die ehrliche Wahl.
Die EOF-Schleife und der Off-by-one, der error 62 auslöst
Sie wissen nicht, wie viele Zeilen eine Datei hat, also lesen Sie bis zum Ende — und der Ende-Test ist der
Ort, an dem der klassische Bug wohnt. Prüfen Sie EOF vor jedem Lesen:
Do Until EOF(n) ' korrekt: pruefen, DANN lesen
Line Input #n, line
' ... Zeile verarbeiten ...
Loop
Die kaputte Gestalt liest zuerst und prüft später, sodass sie einen Lesevorgang über die letzte Zeile
hinaus versucht und error 62 Input past end of file auslöst:
Do While Not EOF(n)
' ... verarbeiten ...
Line Input #n, line ' im letzten Durchlauf liest dies ueber das Ende hinaus -> error 62
Loop
EOF(n) liefert True, sobald die letzte Zeile gelesen wurde. Setzen Sie die EOF-Prüfung an den
Anfang der Schleife, damit sie vor dem Lesevorgang auslöst, der überlaufen würde. Diese eine Anordnung
behebt den Bug „meine Schleife lässt die letzte Zeile fallen oder verdoppelt sie“.
Input(LOF(f), #f): die ganze Datei auf einmal lesen
Wenn Sie die gesamte Datei als eine Zeichenfolge wollen — um sie zu durchsuchen, etwas zu zählen oder sie an einen Parser zu übergeben —, lesen Sie sie in einem einzigen Aufruf:
Dim whole As String
whole = Input(LOF(n), #n) ' LOF(n) = Laenge der Datei in Bytes
LOF liefert die Länge der Datei, und Input(length, #n) liest so viele Zeichen. Es ist die schnellste
Art, eine kleine bis mittlere Datei zu laden, um den Preis, das Ganze im Speicher zu halten — in Ordnung
für ein paar Megabyte, verschwenderisch für ein riesiges Protokoll, das Sie nur Zeile für Zeile durchsuchen
müssen. Dafür bleiben Sie bei der Line Input #-Schleife.
Wann man das Parsen überspringt und stattdessen die Arbeitsmappe öffnet
Wenn die Datei wirklich eine Tabelle ist — eine .csv, die Sie als Zeilen und Spalten wollen, mit korrekt
behandelten gequoteten Kommas —, ist das Text-von-Hand-Parsen der harte Weg.
Workbooks.Open liest eine CSV in ein echtes Blatt, behandelt die
Anführungszeichen-Regeln für Sie und lässt Sie Cells(r, c) direkt lesen:
Dim wb As Workbook
Set wb = Workbooks.Open("C:\data.csv") ' Excel parst die CSV fuer Sie
Behalten Sie die eingebauten Textleser für echte Textarbeit vor — Protokolle, Dateien mit fester Breite,
Konfigurationen oder VBA-zu-VBA-Rundläufe mit Write #/Input #. Für tabellarische Daten, die für Zellen
bestimmt sind, ist das Öffnen der Arbeitsmappe einfacher und korrekter. Beachten Sie, dass das eingebaute
Lesen ANSI ist, sodass eine UTF-8-Datei mit akzentuierten Zeichen ADODB.Stream oder das
FileSystemObject braucht, um korrekt gelesen zu werden.
Das ehrliche Fazit: Line Input als Standard, Input # nur für Write #-Dateien
Drei Leser, und die Wahl geht nicht um Geschwindigkeit — es geht darum, zum Schreiber zu passen:
Line Input #ist der Standard → es reicht Ihnen die rohe Zeile und liest nie falsch; Sie zerlegen sie, also bleiben Sie in Kontrolle.Input #nur fürWrite #-Dateien → es ist der Zwilling vonWrite #und gerät bei einer einfachen CSV mit nicht gequoteten Kommas oder verirrten Anführungszeichen durcheinander.- Prüfen Sie
EOFam Anfang der Schleife → zuerst-lesen-dann-prüfen läuft über die letzte Zeile hinaus und lösterror 62aus. - Tabellarische Daten → öffnen Sie die Arbeitsmappe → lassen Sie Excel die CSV-Anführungszeichen behandeln, statt sie von Hand zu parsen.
Das klarste Zeichen, dass Sie den falschen Leser gewählt haben, sind Spalten, die in den falschen Variablen
landen. Wenn das passiert, haben Sie Input # eine Datei gefüttert, die es nicht geschrieben hat; wechseln
Sie zu Line Input # und zerlegen Sie sie selbst.
Wie ExcelMaster hilft
Eine Datei zurückzulesen heißt, den Leser auf den Schreiber abzustimmen — Input # für Write #-Dateien,
Line Input # für alles andere —, die EOF-Prüfung vor das Lesen zu setzen, damit die letzte Zeile nicht
verloren geht, und zu wissen, wann das Öffnen der CSV als Arbeitsmappe das Text-von-Hand-Parsen schlägt.
Das ist eine Menge Urteilsvermögen für „eine Datei lesen“.
ExcelMaster schreibt den Leser,
der zu Ihrer Datei passt. Beschreiben Sie den Job — „importiere dieses Protokoll in ein Blatt“ oder „lies
jede Zeile und ziehe die Fehlerzeilen heraus“ — und es erzeugt die Do Until EOF-Schleife mit
Line Input #, das korrekte Zerlegen und ein Close, oder öffnet die CSV als Arbeitsmappe, wenn das der
sauberere Weg ist — verankert an ThisWorkbook.Path. Sie beschreiben die Daten, die
Sie brauchen; es schreibt den Code, der jede Zeile genau einmal liest.
Häufig gestellte Fragen
Wie lese ich in VBA eine Textdatei Zeile für Zeile?
Öffnen Sie sie For Input, dann schleifen Sie mit Do Until EOF(n) und Line Input #n, line, um bei
jedem Durchlauf eine rohe Zeile zu lesen, und Close #n, wenn Sie fertig sind. Nehmen Sie die Kanalnummer
aus FreeFile. Setzen Sie die EOF-Prüfung an den Anfang der Schleife, vor das
Lesen, damit die Schleife keinen Lesevorgang über die letzte Zeile hinaus versucht und error 62 auslöst.
Was ist der Unterschied zwischen Line Input # und Input # in VBA?
Line Input # liest eine rohe Zeile in eine Zeichenfolge und überlässt Ihnen das Parsen, sodass es
Ihre Daten nie falsch liest. Input # parst abgegrenzte Felder direkt in Variablen mit den
Anführungszeichen-und-Kommas-Regeln, die Write # schreibt, sodass es nur bei
Dateien verlässlich ist, die Write # erzeugt hat. Für eine einfache CSV verwenden Sie Line Input # und
zerlegen die Zeile selbst.
Warum überspringt oder verdoppelt meine VBA-Leseschleife die letzte Zeile?
Weil die EOF-Prüfung an der falschen Stelle ist. Wenn Sie zuerst lesen und EOF danach prüfen, läuft die
Schleife entweder über die letzte Zeile hinaus — und löst error 62 Input past end of file aus — oder
behandelt sie falsch. Verwenden Sie Do Until EOF(n) am Anfang der Schleife, damit der
Ende-der-Datei-Test vor jedem Line Input # läuft.
Wie lese ich in VBA eine ganze Textdatei in eine Zeichenfolge?
Verwenden Sie die Input-Funktion mit LOF: whole = Input(LOF(n), #n), nachdem Sie die Datei
For Input geöffnet haben. LOF liefert die Dateilänge in Bytes und Input(length, #n) liest so viele
Zeichen in einem Aufruf. Es ist die schnellste Art, eine kleine bis mittlere Datei zu laden, aber es hält
die gesamte Datei im Speicher, verwenden Sie also für sehr große Dateien die Line Input #-Schleife.
Wie lese ich in VBA eine CSV-Datei?
Wenn die CSV tabellarische Daten sind, die für Zellen bestimmt sind, ist der einfachste korrekte Weg
Workbooks.Open, das die Anführungszeichen-Regeln parst und Ihnen ein echtes
Blatt gibt, das Sie mit Cells(r, c) lesen können. Wenn Sie den Text direkt parsen müssen, verwenden Sie
Line Input # und zerlegen jede Zeile, wobei Sie gequotete Kommas selbst behandeln — und greifen Sie zu
ADODB.Stream oder dem FileSystemObject, wenn die Datei UTF-8 ist, da
das eingebaute Lesen ANSI ist.
Getestet in
Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 25.08.2026.
Verwandte Anleitungen: VBA FreeFile & Open · VBA Print # vs Write # · VBA Open Workbook · VBA FileSystemObject · VBA Dir
