Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1904to1908
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

txt-Datei in utf-8 ohne Bom per vba

txt-Datei in utf-8 ohne Bom per vba
30.10.2022 10:27:26
Regina
Hallo,
ich bin ganz neu in vba und möchte per Makro eine Tabelle exportieren. Das Endergebnis soll eine Trennzeichen getrennte .txt-Datei sein mit Codierung UTF-8 ohne BOM. Ich habe verschiedene Tipps in Foren ausprobiert und habe eine Lösung, die fast funktioniert, nur leider ist das Endergebnis UTF8 mit BOM. Ich trenne in zwei Schritte:
1. Export des sheets als .txt Trennzeichen getrennt (funktioniert)
2. Umwalndeln der .txt-Datei in UTF8 (funktioniert, aber ergibt UTF8 mit BOM).
Was muss ich ändern, damit UTF-8 ohne BOM herauskommt? Ich habe schon verschiedene Vorschläge zum direkten Export von UTF-8 ohne BOM gefunden (z.B. https://blog.soprani.at/2017/02/24/csv-in-utf-8-ohne-bom-aus-excel/), die beinhalten aber nie .txt Trennzeichen getrennt. Ich würde also gerne meinen ersten Schritt beibehalten und dann im zweiten etwas ändern, damit UTF-8 ohne BOM herauskommt. Was könnte ich tun? Hier der Code für Schritt 2:

Sub KonvertANSI2UTF()
'** Konvertierung einer ANSI/ASII-Datei in das UTF-8 Format
'** Dimensionierung der Variablen
Dim strTextFile As String
Dim strTextFile_Neu As String
Dim intFile As Integer
Dim sText As String
'** Pfade vorgeben für ANSI- und UTF-Datei
intFile = FreeFile
strTextFile = "C:\Users\L380\Documents\Arbeit\BSB\Phase4_Metadaten\N-3256.txt" 'Pfad der Originaldatei, welche konvertiert werden soll
strTextFile_Neu = "C:\Users\L380\Documents\Arbeit\BSB\Phase4 Metadaten_utf8\N-3256.txt" 'Pfad der neuen UTF-Datei
'** Gesamtes Originial File (ANSI) öffnen und in Varialbe sText einlesen (diese wird anschließend in die UTF-Datei geschrieben)
Open strTextFile For Input As #intFile
sText = Input$(LOF(intFile), intFile)
'** Encoding mit UTF-8, alternativ auch UTF-16 möglich
sCharSet = "utf-8"
'** Schreiben der Daten in die neue UTF-Datei
Set adodbStream = CreateObject("ADODB.Stream")
With adodbStream
.Type = 2 'Stream Typ
.Charset = sCharSet 'Oder utf-16 etc.
.Open
.WriteText sText 'Text schreiben
.SaveToFile strTextFile_Neu, 2 'binary Daten speichern
End With
End Sub
Vielen Dank für Eure Hilfe!

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: txt-Datei in utf-8 ohne Bom per vba
30.10.2022 17:49:48
Regina
Danke für den Hinweis, Herbert_Grom! Leider übersteigt der Tipp meine Fähigkeiten, ich scheitere schon am Ausprobieren:
Das vorgeschlagene Makro hier wird mir, wenn ich es in ein neues Modul kopiere, gar nicht zu Ausführen angeboten. Ich hatte bisher nur mit Makros zu tun, die mit "sub" anfangen (die wurden mir bisher immer zum Ausführen angeboten). Was muss ich tun, um eine "private function" zu starten, damit ich sehen kann, was sie tut? Oder könnte ich in dem Code immer "private function" durch "sub" ersetzen (hat zumindest auf Anhieb nicht geklappt)?
Außerdem finde ich leider in dem Code nicht die Stelle, an der ich meine eigenen Anforderungen eingeben könnte. Vermutlich müsste ich noch eine zusätzliche Reihe an Definitionen ergänzen für vFile, vDataType und vContent? Wie müsste das konkret aussehen?
Ich bin wirklich in vba (noch) ziemlich unerfahren und kann bisher leider nur (mit etwas Glück und sehr viel Mühe) Code leicht anpassen, wenn er schon alle nötigen Elemente beinhaltet... Für nähere Hinweise, wie ich mit dem vorgeschlagenen Code arbeiten könnte, wäre ich deshalb sehr dankbar.
Anzeige
AW: txt-Datei in utf-8 ohne Bom per vba
30.10.2022 17:53:15
Herbert_Grom
Hallo Regina,
das ist eine "Function", die du, mit den entsprechenden Parametern, aus deiner "Sub" heraus aufrufen musst. Über Function-Aufrufe musst du noch mal googeln.
Servus
AW: txt-Datei in utf-8 ohne Bom per vba
30.10.2022 19:41:40
Regina
Hallo Herbert_Grom,
Puh, das ist anscheinend komplizierter, als ich erhofft hatte. Was ich durch googeln verstanden habe, zusammengefasst:
Ich sollte ein sub schreiben, innerhalb dessen diese Funktion aufgerufen wird (und zwar exakt so, wie sie in der Vorlage steht). Im sub lege ich Werte fest für die Variablen vfile (= Pfad und Dateiname für die zu speichernde .txt-Datei) und vdatatype (=.txt) sowie vcontent.
vContent muss vermutlich der komplette Inhalt der fraglichen Tabelle sein (den ich am Ende Tabstopp-getrennt brauche). Also müsste ich vcontent das Ergebnis zuweisen, das ich bisher durch mein sub zum Export als .txt Tabstopp-getrennt generiert habe. Dafür brauche ich vermutlich eine zweite Funktion, die mir den Inhalt der ursprünglichen Tabelle als Variable ausgibt. Richtig? (Mir unklar: kann ich den kompletten Inhalt einer mehrzeiligen Tabelle als einen einzigen string ausgeben lassen, und das ergibt am Ende wieder eine mehrzeilige Tabelle in der .txt -Datei? Oder muss der ganze Prozess Zeile für Zeile ablaufen, sodass vcontent für jede Zeile neu festgelegt werden muss?)
Ich rufe dann die Funktion1 aus dem sub heraus auf mit einem noch zu findenden Befehl (?), die Funktion 1 greift auf die im sub festgelegten Variablen zu, dadurch auch auf die Funktion2 und sorgt dafür, dass der in Funktion 2 generierte Inhalt unter Berücksichtigung der anderen im sub festgelegten Parameter in UTF-8 ohne BOM gespeichert wird.
Ist das das Konstrukt, das sich aus dem vorgeschlagenen Code bauen ließe? Klingt nach einem ziemlichen Mammutprojekt...
Anzeige
AW: txt-Datei in utf-8 ohne Bom per vba
31.10.2022 09:23:45
Herbert_Grom
Hallo Regina,
da dies auch nicht mein Lieblingsgebiet ist, habe ich deine Frage mal auf "offen" gestellt, vielleicht schaut sich das mal ein UDF-Profi an. Falls du hierauf antwortest, dann klicke auch wieder auf "Frage noch offen.". Gutes Gelingen!
Servus
AW: txt-Datei in utf-8 ohne Bom per vba
31.10.2022 09:47:16
Regina
Guten morgen, danke für den Hinweis, den Haken hatte ich übersehen. Falls sich hier jemand findet, zu dessen Lieblingsgebiet utf-8 gehört - oder die Verwendung von Functions - ich bin für jeden Tipp dankbar!
AW: txt-Datei in utf-8 ohne Bom per vba
31.10.2022 09:55:26
ralf_b
was denn nun ? Wills du dir alles haarklein erklären lassen oder selbst recherchieren wie man functions aufruft.
...aus dem sub heraus auf mit einem noch zu findenden Befehl (?).. der befehl ist einfach der Name der function
gibt die function einen Wert zurück , fängt man ihn in einer Variable auf. z.b. var1 = functionname(parameter1,parameter2)
Anzeige
noch offen owt
31.10.2022 09:56:55
ralf_b
AW: noch offen owt
31.10.2022 11:05:51
Regina
Ich wollte vor allem, dass vba das tut, was ich möchte - haarklein erklären war nicht mein Hauptanliegen - sorry, wenn das missverständlich war. Dass es ohne geht, ist aber um so besser. Die Lösung von Peter hat funktioniert, also ganz vielen Dank an alle Beteiligten und Helfenden!
AW: txt-Datei in utf-8 ohne Bom per vba
31.10.2022 09:55:42
snb
und möchte per Makro eine Tabelle exportieren. Das Endergebnis soll eine Trennzeichen getrennte .txt-Datei sein mit Codierung UTF-8 ohne BOM.
Dann zeig uns mal bitte die Tabelle.
AW: txt-Datei in utf-8 ohne Bom per vba
31.10.2022 10:22:16
peterk
Hallo
Probier mal:

Sub KonvertANSI2UTF()
'** Konvertierung einer ANSI/ASII-Datei in das UTF-8 Format
'** Dimensionierung der Variablen
Dim strTextFile As String
Dim strTextFile_Neu As String
Dim intFile As Integer
Dim sText As String
'** Pfade vorgeben für ANSI- und UTF-Datei
intFile = FreeFile
strTextFile = "C:\Users\L380\Documents\Arbeit\BSB\Phase4_Metadaten\N-3256.txt" 'Pfad der Originaldatei, welche konvertiert werden soll
strTextFile_Neu = "C:\Users\L380\Documents\Arbeit\BSB\Phase4 Metadaten_utf8\N-3256.txt" 'Pfad der neuen UTF-Datei
'** Gesamtes Originial File (ANSI) öffnen und in Varialbe sText einlesen (diese wird anschließend in die UTF-Datei geschrieben)
Open strTextFile For Input As #intFile
sText = Input$(LOF(intFile), intFile)
'** Encoding mit UTF-8, alternativ auch UTF-16 möglich
sCharSet = "utf-8"
'** Schreiben der Daten in UTF Format
Set adodbStream = CreateObject("ADODB.Stream")
With adodbStream
.Type = 2 'Stream Typ
.Charset = sCharSet 'Oder utf-16 etc.
.Open
.WriteText sText 'Text schreiben
.flush
End With
Set adodbBinStream = CreateObject("ADODB.Stream")
With adodbBinStream
.Open
.Type = 1 ' TypeBinary
End With
'Strips BOM (first 3 bytes)
adodbStream.Position = 3 'skip BOM
adodbStream.CopyTo adodbBinStream
adodbBinStream.SaveToFile strTextFile_Neu, 2 'binary Daten speichern
End Sub
Peter
Anzeige
AW: txt-Datei in utf-8 ohne Bom per vba
31.10.2022 11:01:09
Regina
Hallo Peter,
super, ganz ganz vielen Dank, das hat funktioniert! Tausend Dank! Das ist ja wirklich super (und sieht ganz einfach aus.... wenn man es weiß). Jetzt muss ich es nur noch in den Rest einbasteln.
Viele Grüße
Regina
AW: txt-Datei in utf-8 ohne Bom per vba
31.10.2022 12:18:49
snb
Hattest du schon versucht ?

Sub M_snb()
ThisWorkbook.SaveAs "G:\OF\Beispiel_UTF_8.txt", 42, , , , , , 65001
End Sub

AW: txt-Datei in utf-8 ohne Bom per vba
31.10.2022 12:33:43
Regina
Danke, snb! Der Vorschlag von Peter hat funktioniert. Offensichtlich blicke ich nicht, wie ich anzeigen kann, dass die Frage beantwortet ist...
AW: txt-Datei in utf-8 ohne Bom per vba
31.10.2022 17:47:03
snb
Du hast meine Frage noch nicht beantwortet.
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige