Microsoft Excel

Herbers Excel/VBA-Archiv

Viele Texte zeilenweise speichern?

Betrifft: Viele Texte zeilenweise speichern? von: Sergej
Geschrieben am: 12.10.2020 19:04:43

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

Betrifft: AW: Viele Texte zeilenweise speichern?
von: volti
Geschrieben am: 12.10.2020 19:51:39

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

Betrifft: AW: Viele Texte zeilenweise speichern?
von: Sergej
Geschrieben am: 12.10.2020 20:15:14

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

Betrifft: AW: Viele Texte zeilenweise speichern?
von: volti
Geschrieben am: 13.10.2020 00:10:33

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


Betrifft: AW: Viele Texte zeilenweise speichern?
von: Sergej
Geschrieben am: 13.10.2020 20:19:24

Hallo Karl-Heinz,

vielen herzlichen Dank.

Beste Grüße,
Sergej