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

Viele Texte zeilenweise speichern?

Forumthread: Viele Texte zeilenweise speichern?

Viele Texte zeilenweise speichern?
12.10.2020 19:04:43
Sergej
Hallo Leute,
wie kann ich viele Texte (ca. 50 Zeilen) per VBA in eine TXT-Datei zeilenweise im UTF-8 Format schreiben?
Die Texte sollen im Code und nicht in einem Arbeitsblatt definiert werden.
Das Makro für zwei Zeilen habe ich zurzeit wie folgt vorbereitet:
Sub T_1()
tmpStr = "qweüöä" & vbCrLf & "ASDLÖÄ"
sFilename = "C:\ADO_Test.txt"
Set fsT = CreateObject("ADODB.Stream")
fsT.Type = 2                'Stream-Typ: Text/String
fsT.Charset = "utf-8"       'Zeichensatz
fsT.Open                    'Stream öffnen
fsT.WriteText tmpStr        'Daten schreiben
fsT.SaveToFile sFilename, 2 'Datei speichern
Set fsT = Nothing
End Sub
Geht es auch ohne & vbCrLf quasi so, dass ich im Code untereinander die Texte schriebe?
Besten Dank im Voraus.
Gruß,
Sergej
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Viele Texte zeilenweise speichern?
12.10.2020 19:51:39
volti
Hallo Sergej,
wenn Du die Texte vorher in einer Variablen sammelst, also so wie Du es schon machst und alles in einem Rutsch wegschreibst, geht es nicht ohne vbCrLf, denn das ist ja der Zeilenvorschub bzw. das Datenzeilenende.
Du könntest natürlich auch zunächst einen beliebigen Platzhalter für den Zeilenumbruch verwenden:
tmpStr = "qweüöä|ASDLÖÄ|weiteres|noch weiteres..."
und den dann ersetzen:
tmpStr = Replace(tmpStr, "|", vbCrLf)
viele Grüße
Karl-Heinz
Anzeige
AW: Viele Texte zeilenweise speichern?
12.10.2020 20:15:14
Sergej
Hallo Karl-Heinz,
vielen Dank für deine Antwort. Meine Zeilen sind etwas lang und beinhalten Zeichen, die wahrscheinlich im Code mit Anführungszeichen maskiert werden müssen, oder? Ein Ausschnitt der Zeilen?
Description="SV_Revisionsöffnung" Module="vent" Datamask="*" Condition="KBZ=RVE"
Value="[WS]W@[TYP]E@[REF]P1@[TOP]-${b}/2-25@[BOTOM]${b}/2+25@[LEFT]-${a}/2-25@[RIGHT]${a}/2+25@[ _
FRONT]0@[END]150.0@[ATTRI]STOER2@[P_K_KBZ]@[P_BEZ]@[P_AKS_00]@"
Description="SV_Vent_1" Module="vent" Datamask="123" Condition="KBZ=SY81"
Value="[WS]W@[TYP]E@[REF]P1@[TOP]-${D}/2-30@[BOTOM]${D}/2+30@[LEFT]-${D}/2-160@[RIGHT]-${D}/2@[ _
FRONT]0@[END]${l}.0@[ATTRI]STOER2@[P_K_KBZ]@[P_BEZ]@[P_AKS_00]@"
Description="SV_Auslass_1" Module="vent" Datamask="20111" Condition="KBZ=OUTLET"
Value="[WS]S@[TYP]R@[REF]P1@[P1.X]!P2.X@[P1.Y]!P2.Y@[P1.Z]!P2.Z@[P2.X]!P2.X+150@[P2.Y]!P2.Y@[P2. _
Z]!P2.Z@[DN]${d1}@[ATTRI]STOER1@[P_K_KBZ]@[P_BEZ]@[P_AKS_00]@"
Description="SV_Auslass_2" Module="vent" Datamask="120" Condition="KBZ=GM"
Value="[WS]S@[TYP]E@[REF]P1@[TOP]-${a}/2@[BOTOM]${a}/2@[LEFT]-${b}/2@[RIGHT]${b}/2@[FRONT]${l}@[END]${l}+150.0@[ATTRI]STOER1@[P_K_KBZ]@[P_BEZ]@[P_AKS_00]@"
Beste Grüße,
Sergej
Anzeige
AW: Viele Texte zeilenweise speichern?
13.10.2020 00:10:33
volti
Hallo Sergej,
wenn Du so lange Texte einschließlich " im Code unterbringen willst, könntest Du sie in einem Array unterbringen. Die " würde ich wieder mit einem Platzhalter vorhalten, z.B. ', was dann später in einer Schleife ersetzt und geschrieben wird.
Hier ein Vorschlag:

Code:
[Cc][+][-]
 
Sub T_1() Dim sArr(2) As String, sFilename As String Dim i As Integer sArr(0) = "Description='SV_Revisionsöffnung' Module='vent' Datamask='*' Condition='KBZ=RVE' " _ & "Value='[WS]W@[TYP]E@[REF]P1@[TOP]-${b}/2-25@[BOTOM]${b}/2+25@[LEFT]-${a}/2-25@[RIGHT]${a}/2+25@[" _ & "FRONT]0@[END]150.0@[ATTRI]STOER2@[P_K_KBZ]@[P_BEZ]@[P_AKS_00]@'" sArr(1) = "Description='SV_Vent_1' Module='vent' Datamask='123' Condition='KBZ=SY81'" _ & "Value='[WS]W@[TYP]E@[REF]P1@[TOP]-${D}/2-30@[BOTOM]${D}/2+30@[LEFT]-${D}/2-160@[RIGHT]-${D}/2@[" _ & "FRONT]0@[END]${l}.0@[ATTRI]STOER2@[P_K_KBZ]@[P_BEZ]@[P_AKS_00]@'" sArr(2) = "Description='SV_Auslass_1' Module='vent' Datamask='20111' Condition='KBZ=OUTLET'" _ & "Value='[WS]S@[TYP]R@[REF]P1@[P1.X]!P2.X@[P1.Y]!P2.Y@[P1.Z]!P2.Z@[P2.X]!P2.X+150@[P2.Y]!P2.Y@[P2." _ & "Z]!P2.Z@[DN]${d1}@[ATTRI]STOER1@[P_K_KBZ]@[P_BEZ]@[P_AKS_00]@'" sFilename = "C:\ADO_Test.txt" With CreateObject("ADODB.Stream") .Type = 2 'Stream-Typ: Text/String .Charset = "utf-8" 'Zeichensatz .Open 'Stream öffnen For i = 0 To UBound(sArr) .WriteText Replace(sArr(i), "'", """") & vbCrLf 'Daten schreiben Next i .SaveToFile sFilename, 2 'Datei speichern .Close 'Stream schließen End With End Sub
 
____________________
viele Grüße aus Freigericht
Karl-Heinz

Anzeige
AW: Viele Texte zeilenweise speichern?
13.10.2020 20:19:24
Sergej
Hallo Karl-Heinz,
vielen herzlichen Dank.
Beste Grüße,
Sergej
;
Anzeige
Anzeige

Infobox / Tutorial

Texte zeilenweise in eine TXT-Datei speichern mit VBA


Schritt-für-Schritt-Anleitung

Um viele Texte zeilenweise in eine TXT-Datei im UTF-8 Format zu speichern, kannst du folgendes VBA-Skript verwenden. Dieses Beispiel zeigt, wie du die ADODB.Stream-Klasse nutzt, um die Daten zu schreiben. Der Code speichert die Texte in einer Datei namens ADO_Test.txt.

Sub T_1()
    Dim sArr(2) As String
    Dim sFilename As String
    Dim i As Integer

    sArr(0) = "Description='SV_Revisionsöffnung' Module='vent' Datamask='*' Condition='KBZ=RVE'" _
              & vbCrLf & "Value='[WS]W@[TYP]E@[REF]P1@[TOP]-${b}/2-25@[BOTOM]${b}/2+25@[LEFT]-${a}/2-25@[RIGHT]${a}/2+25@[FRONT]0@[END]150.0@[ATTRI]STOER2@[P_K_KBZ]@[P_BEZ]@[P_AKS_00]@'"
    sArr(1) = "Description='SV_Vent_1' Module='vent' Datamask='123' Condition='KBZ=SY81'" _
              & vbCrLf & "Value='[WS]W@[TYP]E@[REF]P1@[TOP]-${D}/2-30@[BOTOM]${D}/2+30@[LEFT]-${D}/2-160@[RIGHT]-${D}/2@[FRONT]0@[END]${l}.0@[ATTRI]STOER2@[P_K_KBZ]@[P_BEZ]@[P_AKS_00]@'"
    sArr(2) = "Description='SV_Auslass_1' Module='vent' Datamask='20111' Condition='KBZ=OUTLET'" _
              & vbCrLf & "Value='[WS]S@[TYP]R@[REF]P1@[P1.X]!P2.X@[P1.Y]!P2.Y@[P1.Z]!P2.Z@[P2.X]!P2.X+150@[P2.Y]!P2.Y@[P2.Z]!P2.Z@[DN]${d1}@[ATTRI]STOER1@[P_K_KBZ]@[P_BEZ]@[P_AKS_00]@'"

    sFilename = "C:\ADO_Test.txt"
    With CreateObject("ADODB.Stream")
        .Type = 2 ' Stream-Typ: Text/String
        .Charset = "utf-8" ' Zeichensatz
        .Open ' Stream öffnen
        For i = 0 To UBound(sArr)
            .WriteText sArr(i) & vbCrLf ' Daten schreiben
        Next i
        .SaveToFile sFilename, 2 ' Datei speichern
        .Close ' Stream schließen
    End With
End Sub

Häufige Fehler und Lösungen

  1. Fehler: "Datei kann nicht gespeichert werden."

    • Lösung: Stelle sicher, dass der angegebene Pfad (sFilename) existiert und du Schreibrechte hast.
  2. Fehler: "Zeichensatz nicht erkannt."

    • Lösung: Überprüfe, ob die ADODB.Stream-Bibliothek in deinem VBA-Projekt aktiviert ist.
  3. Fehler: Unerwartete Zeichen in den Texten.

    • Lösung: Achte darauf, dass alle Sonderzeichen und Anführungszeichen richtig maskiert sind.

Alternative Methoden

Eine weitere Möglichkeit, Texte zeilenweise zu speichern, ist die Verwendung von FileSystemObject. Hier ist ein kurzes Beispiel:

Sub SaveToFile()
    Dim fso As Object
    Dim ts As Object
    Dim sFilename As String

    sFilename = "C:\ADO_Test.txt"
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.CreateTextFile(sFilename, True, True) ' True für UTF-8

    ts.WriteLine "Dein Text hier"
    ts.WriteLine "Ein weiterer Text"

    ts.Close
End Sub

Praktische Beispiele

Wenn du eine Liste von verschiedenen Texten hast, kannst du sie in einem Array speichern und dann so speichern:

Dim texts(2) As String
texts(0) = "Erster Text"
texts(1) = "Zweiter Text"
texts(2) = "Dritter Text"

Diese Texte kannst du dann in einer Schleife wie im vorherigen Beispiel in die Datei schreiben.


Tipps für Profis

  • Fehlerbehandlung: Implementiere Fehlerbehandlung, um unerwartete Fehler abzufangen. Zum Beispiel:
On Error GoTo ErrorHandler
' Dein Code hier
Exit Sub
ErrorHandler:
    MsgBox "Ein Fehler ist aufgetreten: " & Err.Description
  • Leistungsoptimierung: Wenn du eine große Anzahl an Zeilen schreibst, speichere sie zuerst in einer String-Variable und schreibe sie dann auf einmal in die Datei.

FAQ: Häufige Fragen

1. Kann ich auch andere Dateiformate speichern? Ja, du kannst auch andere Formate wie CSV speichern. Ändere einfach die Dateiendung in sFilename.

2. Wie gehe ich mit langen Texten um? Verwende ein Array, um den Text zu speichern, und ersetze Anführungszeichen durch Platzhalter, bevor du die Texte schreibst.

3. Ist es möglich, mehrere Dateien gleichzeitig zu speichern? Ja, du kannst mehrere ADODB.Stream-Objekte verwenden, um mehrere Dateien gleichzeitig zu erstellen und zu speichern.

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