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

Daten in TXT Datei Schreiben/Lesen

Forumthread: Daten in TXT Datei Schreiben/Lesen

Daten in TXT Datei Schreiben/Lesen
lutz
Hallo Excel-Spezialisten, ich habe mal wieder ein Problem bei dem ich leider nicht weiterkomme.
Ich möchte Daten die ich immer in eine Tabelle "Liste" buche, auch in eine externe txt-Datei wegschreiben.
Dazu müssen natürlich immer nur die Neuen Zeilen dazu übertragen werden.
Ich habe einen Code (von Tino?) im Internet gefunden er auch gut funktioniert:
Option Explicit
'*********************************
'------Excel und Textdateien------
'-------Schreiben und Lesen-------
'*********************************

Sub ZeileInTXTschreiben2()
' schreibt 1 Zeile in eine Textdatei
Dim intFF As Integer
Dim strDatei As String
strDatei = "d:\Test.txt"
intFF = FreeFile
Open strDatei For Output As #intFF      ' Öffnet oder erstellt Textdatei zum  _
hineinschreiben
' Anstelle von Output kann auch Append stehen
' (Output überschreibt vorhandene Datei, Append fü _
gt eine neue Zeile hinzu)
Print #intFF, Cells(1, 1)       ' Schreibt den Wert aus A1 in die Datei
Close #intFF                            ' schließt die Textdatei
End Sub

Sub ZeileninTXTschreiben()
' schreibt alle Zellen aus Spalte A(1) in eine Textdatei
Dim intFF As Integer
Dim iZeile As Integer
Dim strDatei As String
Dim strTemp As String
strDatei = "d:\Test.txt"
intFF = FreeFile
iZeile = 1                                 ' Variable für Zeilennummer
Open strDatei For Output As #intFF      ' Öffnet oder erstellt Textdatei zum  _
hineinschreiben
Do Until Cells(iZeile, 1).Value = ""    ' Schleife: Laufe solange, bis Zelle leer ist
strTemp = Cells(iZeile, 1)              ' Zellwert an Zwischenspeicher übergeben
Print #intFF, strTemp                   ' Zwischenspeicher in TXTDatei schreiben
iZeile = iZeile + 1                     ' Zeilenzähler erhöhen
Loop                                    ' zurück zum Schleifenbeginn
Close #intFF                            ' schließt die Textdatei
End Sub

'-------------------------------------------------------------------

Sub ZeileAusTXTlesen2()
' liest 1 Zeile aus einer Textdatei
Dim intFF As Integer
Dim strDatei As String
strDatei = "d:\Test.txt"
intFF = FreeFile
Open strDatei For Input As #intFF       ' Öffnet Textdatei zum Lesen
Line Input #intFF, strDatei             ' Liest die 1. Zeile aus
Range("A1") = strDatei                  ' Der Wert wird aus dem Zwischenspeicher an die  _
Zelle A1 übergeben
Close #intFF                            ' schließt die Textdatei
End Sub


Sub ZeilenAusTXTlesen()
' liest alle Zeilen aus einer Textdatei und schreibt Inhalt in Spalte A
Dim intFF As Integer
Dim iZeile As Integer
Dim strDatei As String
strDatei = "d:\Test.txt"
intFF = FreeFile
iZeile = 1                                 ' Variable für Zeilennummer
Open strDatei For Input As #intFF       ' Öffnet Textdatei zum Lesen
Do While Not EOF(intFF)                 ' Schleife: Laufe bis zur letzten Zeile
Line Input #intFF, strDatei             ' Zeile Lesen und zwischenspeichern
Cells(iZeile, 1) = strDatei             ' Zwischenspeicher an Zelle übergeben
iZeile = iZeile + 1                     ' Zeilennummer erhöhen
Loop                                    ' zurück zum Schleifenbeginn
Close #intFF                            ' schließt die Textdatei
End Sub

Mein Problem: ich möchte nicht nur Spalte A übertragen sondern eigentlich alles aus der Tabelle - am besten wohl getrennt mit Komma oder Semikolon.
Wie müßte man den Code anpassen?
Entweder so das man vorgibt welche Spalten er übertragen soll oder noch besser wenn er das aus dem Inhalt der Tabelle "Liste" ermittelt.
Die Tabelle Liste ist so aufgebaut das immer in Spalte A etwas steht wenn auch in den anderen Spalten Einträge sind - der Code muß also nur Spalte A prüfen.
Vielen Dank für Euro Hilfe ind viele Grüße Lutz

Anzeige

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

Betreff
Benutzer
Anzeige
AW: Daten in TXT Datei Schreiben/Lesen
15.09.2012 16:06:39
fcs
Hallo Lutz,
deine Liste wird ja einen festen Spaltenaufbau haben.
Was für Inhalte sind denn in den Spalten?
Wichtig: Hast du Texte in den Spalten?
Sind diese semikolon-frei, so dass man das das Semicolon als Trennzeichen verwenden kann?
Alternativ müßte man "Tab" oder einen Exoten als Trennzeichen benutzen.
Sind in den Texten Zeilenschaltungen (Zeichen(10) bzw. mit Alt+Enter eingegeben) enthalten? Diese sind Gift, wenn man die Daten wieder in Excel einlesen möchte.
Sind deine Zahlen/Datum konsequent mit einer Ländereinstellung formatiert?
Sollen bei Zahlen/Datum/Zeit die Werte wie angezeigt/formatiert oder inklusive aller Nachkommastellen in die Textdatei geschrieben werden? Bei Zahlen ist es meist sicherer, diese ohne 1000er-Trennzeichen zu schreiben, speziell wenn Re-Import angestrebt ist.
Bei Datum ist ratsam das Format JJJJ-MM-TT zu schreiben, bei Zeiten hh:mm:ss. Dann gibt es beim Wiedereinlesen in Excel keine Problem.
Enthalten deine Daten Angaben wir PLZ oder Telefon-Nr.? Diese sollten als Text und in Anführungszeichen in die Textdatei geschrieben werden, so dass Excel diese beim Re-Import nicht versucht in Zahlen umzuwandeln.
Trennzeichen: Dieses ist abhängig vom verwendeten Zahlenformat.
Dezimalzeichen=Komma, dann Trennzeichen=Semicolon (z,B. Deutschland und andere)
Dezimalzeichen=Punkt, dann Trennzeichen=Komma (z.B. USA und andere)
Am besten, du lädst eine Exceldatei mit ein paar Beispieldaten hoch und eine Textdatei, wie es nach dem Export aussehen soll.
Gruß
Franz

Anzeige
AW: Daten in TXT Datei Schreiben/Lesen
16.09.2012 10:17:42
lutz
Hallo Franz,
es stehen verschiedene Daten drin, deutsche Zahlenangaben, Postleitzahl ist auch dabei...
Umbrüche sollten nicht vorkommen; Tabs auch nicht, ich denke auch keine Semikolons.
https://www.herber.de/bbs/user/81855.xls (Das Blatt sollte nur Liste heißen)
Ich denke als Trennzeichen wäre ein Tab oder ein Exot wie der senkrechte Strich nach oben (Tastatur Alt+kleiner/größer-Taste) am besten.
Die Rücklesefähigkeit ist auch eher optional; wenn man dann noch mal etwas umformatieren müßte bringt mich das nicht um - wichtig ist dass keine Daten mehr verlorengehen können.
Gibt es eigentlich auch nicht editierbare Dateien? In den TXT kann ja auch jeder manuell editieren aber es ist ein Anfang und die Buchungen wären außerhalb von Excel gesichert.
Viele Grüße Lutz

Anzeige
AW: Daten in TXT Datei Schreiben/Lesen
16.09.2012 23:30:32
fcs
Hallo Lutz,
hier 2 Varianten zum Speichern der Daten eines Excel-Tabellenblatts als Textdatei.
Einige Details im Code (z.B. Dateinamen muss du noch ein wenig anpassen)
Variante 1: massgeschneidert für Datenformate in den Spalten und Anzahl Spalten
https://www.herber.de/bbs/user/81859.txt
Variante 2: allgemein ohne Vorgabe der Spaltenzahl (wird vom Makro ermittelt)
https://www.herber.de/bbs/user/81860.txt
Beide Varianten scheinen mit deinen Daten für Export und Import gut zu funktionieren.
Als Trennzeichen wird TAB verwendet.
Daten gegen editoeren schützen:
Der setzt automatisch den einfachen Schreibschutz für die erstellte Textdatei. Der kann natürlich mit einfachen Mitteln auch wieder abgeschaltet werden.
Weitergehende Massnahmen wären die Textdatei auf Laufwerk/Verzeichnis mit beschränktem Zuriff zu speichern oder in eine ZIP-Datei mit Kennwort zu stecken.
Du könntest natürlich genausogut von dem Exceltabellenblatt eine Kopie in einer externen Arbeitsmappe erstellen. Zusätzlich solltest du dir Gedanken machen über die allgemeine Daten-Backup-Speicherung auf einem externen Datenträger - extern = Standort außerhalb des Raumes/Standorts des PC.
Gruß
Franz

Anzeige
Kann man Split umgehen?
17.09.2012 16:31:50
KlausF
Hallo Franz, bin beeindruckt,
habe das hier mit Interesse verfolgt und auch mal getestet. Der Export funktioniert bei mir,
der Import meckert bei der Zeile: arrSplit = Split(strDatei, strSep)
Die Funktion Split gibt es leider bei meiner Excelversion noch nicht (Mac, Version 10)
Lässt sich das irgendwie durch einen Trick umgehen?
Probiert hatte ich mal eine Ersatzfunktion hier aus dem Forum
Function SplitVBA(strText As String, Trenner As String)
'14.02.2012, NoNet - www.excelei.de
Dim a As Long, b As Long, c() As String
Dim d As Long, vorher As Long
d = Len(Trenner)
vorher = 1
ReDim c(1 To Len(strText) \ d + 1)
Do
b = InStr(vorher, strText, Trenner)
If b = 0 Then
c(a + 1) = Mid$(strText, vorher, Len(strText))
If c(a + 1) = "" Then a = a - 1
Exit Do
Else
c(a + 1) = Mid$(strText, vorher, b - vorher)
End If
vorher = b + d
a = a + 1
Loop
ReDim Preserve c(1 To a + 1)
SplitVBA = c
End Function
Meldung war Fehler 9, Index außerhalb des gültigen Bereichs.
Habe dann strText mal als Variant gesetzt aber gleiche Fehlermeldung ...
Gruß
Klaus

Anzeige
AW: Kann man Split umgehen?
17.09.2012 22:33:51
lutz
Hallo Franz,
sorry komme jetzt erst wieder nach Hause...
Vielen Lieben Dank für Deine Mühe - funktioniert echt super!!!
Ich wünsche Dir noch einen schönen Abend/Tag, noch mal vielen Dank und viele Grüße aus Hamburg
Lutz

AW: Kann man Split umgehen?
18.09.2012 06:55:40
fcs
Hallo Klaus,
Split erzeugt ein Array, dessen Felder-Index (LBound) bei 0 beginnt.
Nach folgend die Funktion SplitVBA entsprechend angepasst.
Gruß
Franz
Function SplitVBA(strText As String, Trenner As String)
'14.02.2012, NoNet - www.excelei.de - modifiziert fcs 2012-09-18
Dim a As Long, b As Long, c() As String
Dim d As Long, vorher As Long
d = Len(Trenner)
vorher = 1
a = -1
ReDim c(0 To Len(strText) \ d)
Do
a = a + 1
b = InStr(vorher, strText, Trenner)
If b = 0 Then
c(a) = Mid$(strText, vorher, Len(strText))
Exit Do
Else
c(a) = Mid$(strText, vorher, b - vorher)
End If
vorher = b + d
Loop
ReDim Preserve c(0 To a)
SplitVBA = c
End Function

Anzeige
Perfekt!
18.09.2012 11:30:40
KlausF
Hallo Franz,
bin begeistert, läuft absolut perfekt!
Vielen Dank dafür ...
Gruß aus Hamburg
Klaus
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Daten in TXT-Datei Schreiben und Lesen mit VBA


Schritt-für-Schritt-Anleitung

Um Daten aus Excel in eine TXT-Datei zu schreiben, kannst du VBA verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und gehe zu dem Arbeitsblatt, das du verwenden möchtest.

  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Füge ein neues Modul hinzu:

    • Klicke im Menü auf Einfügen > Modul.
  4. Kopiere den folgenden Code in das Modul:

    Sub DatenInTXTschreiben()
       Dim intFF As Integer
       Dim strDatei As String
       Dim iZeile As Integer
       Dim strTemp As String
    
       strDatei = "D:\Test.txt" ' Pfad zur TXT-Datei
       intFF = FreeFile
       iZeile = 1 ' Beginne mit der ersten Zeile
    
       Open strDatei For Output As #intFF ' Öffnet die Datei zum Schreiben
    
       Do Until Cells(iZeile, 1).Value = "" ' Solange Zelle nicht leer
           strTemp = Cells(iZeile, 1) ' Wert in Zwischenspeicher
           Print #intFF, strTemp ' In TXT schreiben
           iZeile = iZeile + 1 ' Zeilenzähler erhöhen
       Loop
    
       Close #intFF ' Schließt die Datei
    End Sub
  5. Führe das Makro aus:

    • Gehe zurück zu Excel, drücke ALT + F8, wähle DatenInTXTschreiben und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler: "Index außerhalb des gültigen Bereichs"

    • Dieser Fehler kann auftreten, wenn du versuchst, auf eine Zeile oder Spalte zuzugreifen, die nicht existiert. Überprüfe die Zellreferenzen, um sicherzustellen, dass sie innerhalb des gültigen Bereichs liegen.
  • Problem mit dem Schreiben von Daten

    • Achte darauf, dass der Pfad zur TXT-Datei korrekt ist. Wenn der Ordner nicht existiert, kann die Datei nicht erstellt werden.

Alternative Methoden

Wenn du eine TXT-Datei erstellen möchtest, die nicht bearbeitet werden kann, kannst du die Datei zippen oder in ein anderes Format konvertieren. Hier sind einige Alternativen:

  • Textdatei in ZIP konvertieren: Sicherer, da sie nicht einfach bearbeitet werden kann.
  • CSV-Datei statt TXT verwenden: CSV-Dateien können von Excel direkt geöffnet werden und sind ebenfalls einfach zu erstellen.

Praktische Beispiele

Hier sind einige praktische Beispiele für das Schreiben und Lesen von Daten in TXT-Dateien:

  1. Daten aus mehreren Spalten schreiben:

    Sub MehrereSpaltenInTXTschreiben()
       Dim intFF As Integer
       Dim strDatei As String
       Dim iZeile As Integer
       Dim strTemp As String
    
       strDatei = "D:\Test.txt"
       intFF = FreeFile
       iZeile = 1
    
       Open strDatei For Output As #intFF
    
       Do Until Cells(iZeile, 1).Value = "" ' Solange Zelle nicht leer
           strTemp = Cells(iZeile, 1) & vbTab & Cells(iZeile, 2) ' Trennzeichen Tab
           Print #intFF, strTemp
           iZeile = iZeile + 1
       Loop
    
       Close #intFF
    End Sub
  2. Daten aus einer TXT-Datei lesen:

    Sub DatenAusTXTlesen()
       Dim intFF As Integer
       Dim strDatei As String
       Dim iZeile As Integer
    
       strDatei = "D:\Test.txt"
       intFF = FreeFile
       iZeile = 1
    
       Open strDatei For Input As #intFF
    
       Do While Not EOF(intFF)
           Line Input #intFF, Cells(iZeile, 1) ' Liest Zeile und schreibt in A1
           iZeile = iZeile + 1
       Loop
    
       Close #intFF
    End Sub

Tipps für Profis

  • Verwende Append statt Output, um Daten zu einer bestehenden TXT-Datei hinzuzufügen, anstatt sie zu überschreiben.
  • Nutze Fehlerbehandlung in deinem VBA-Code, um unerwartete Probleme beim Schreiben oder Lesen von Dateien zu vermeiden.
  • Teste deine Makros in einer sicheren Umgebung, um Datenverlust zu vermeiden.

FAQ: Häufige Fragen

1. Was ist eine TXT-Datei?
Eine TXT-Datei ist eine einfache Textdatei, die unformatierte Textinformationen speichert. Sie kann mit jedem Texteditor geöffnet werden.

2. Wie kann ich eine TXT-Datei auf einem Mac erstellen?
Du kannst eine TXT-Datei auf einem Mac mit dem TextEdit-Programm erstellen. Wähle Datei > Neu, schreibe deinen Text und speichere die Datei als .txt.

3. Was passiert, wenn ich eine TXT-Datei öffne?
Wenn du eine TXT-Datei öffnest, siehst du den Inhalt in einem Texteditor. Je nach Inhalt kann es sein, dass der Text nicht formatiert ist und keine speziellen Zeichen oder Layouts enthält.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige