Office-Fragen.de

Normale Version: Excel per Visual Basic (VB) in CSV exportieren mit Sonderzeichen
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Liebes Forum,

folgende Frage: Wie kann ich eine Excel-Tabelle (MS Office 2016) per Visual Basic (VB) in eine CSV-Datei exportieren, ohne dass sie ihre Sonderzeichen verliert? Deutsche Sonderzeichen/Umlaute ÄÖÜß werden zwar problemlos exportiert, aber polnische Sonderzeichen ąćęń usw. werden in normale Buchstaben (acen) verändert.

Etwas mehr im Detail:
Ich möchte eine Excel-Adressdatenbank in CSV konvertieren, um sie später in Outlook importieren zu können. Outlook braucht aber für den Import eine CSV-Datei, in der die Datensätze durch Anführungsstriche (") begrenzt sind. Excel kann das leider nicht. Im Internet habe ich als einzige Lösung gefunden, dass man hierzu ein VB-Makro verwendet, welches den Export übernimmt. Ich kenne mich mit VB nicht aus und habe den Programmcode aus einem Forum übernommen. Die entsprechende Excel-Datei mit Makro habe ich als xlsm-Datei gespeichert und der Export funktioniert wunderbar. Mir ist jetzt aber aufgefallen, dass polnische Namen mit entsprechenden Sonderzeichen umgewandelt werden.

Wie müsste ich den VB-Code unten abändern, damit alle Sonderzeichen übernommen werden? Kann mir da jemand behilflich sein?

Danke und herzlichen Gruß
Yukusoona

Der VB-Code:

Sub CSV_mit_Anfuehrungszeichen()
  Dim wks As Worksheet, Ze As Long, Sp As Long, ZeTmp As String
  Dim lCol As Long, lRow As Long, Frf As Long
  Const csvExport = "C:\Users\***\***.csv"  'Anpassen
  Const Trenner As String = ","    'Trenner für Spalten, kann angepasst werden
  Const Anf As String = """"
 
  Frf = FreeFile
  Set wks = ThisWorkbook.Worksheets("Adressen")  'Anpassen: Register-Name
  lCol = wks.Cells(1, Columns.Count).End(xlToLeft).Column
  lRow = wks.Cells(Rows.Count, 1).End(xlUp).Row
 
  Open csvExport For Output As #Frf
  For Ze = 1 To lRow
      For Sp = 1 To lCol
          ZeTmp = ZeTmp & Anf & CStr(wks.Cells(Ze, Sp).Text) & Anf & Trenner
      Next Sp
      ZeTmp = Left(ZeTmp, Len(ZeTmp) - 1)  'Letztes Trennzeichen löschen
      Print #Frf, ZeTmp
      ZeTmp = ""
  Next Ze
  Close #Frf
End Sub


Vorhin habe ich in einem anderen Forum noch einen weiteren Programmcode gefunden, der zwar auch funktioniert, aber ebenfalls die Sonderzeichen klaut:

Sub CSVFile()
Dim SrcRg As Range
Dim CurrRow As Range
Dim CurrCell As Range
Dim CurrTextStr As String
Dim ListSep As String
Dim FName As Variant
FName = Application.GetSaveAsFilename("", "CSV File (*.csv), *.csv")
ListSep = Application.International(xlListSeparator)
If Selection.Cells.Count > 1 Then
Set SrcRg = Selection
Else
Set SrcRg = ActiveSheet.UsedRange
End If
Open FName For Output As #1
For Each CurrRow In SrcRg.Rows
CurrTextStr = ìî
For Each CurrCell In CurrRow.Cells
CurrTextStr = CurrTextStr & """" & CurrCell.Value & """" & ListSep
Next
While Right(CurrTextStr, 1) = ListSep
CurrTextStr = Left(CurrTextStr, Len(CurrTextStr) - 1)
Wend
Print #1, CurrTextStr
Next
Close #1
End Sub
Hallo,

dazu sollten die Daten als UTF8-CSV-Datei exportiert werden. Hier mal ein Beispielcode (WriteUTF8WithoutBOM)

https://stackoverflow.com/questions/6952...-excel-vba

Gruß
Hallo,

du musst die Textdatei im Format "UTF-8" speichern: FileFormat:=xlCSVUTF8

Gruß Sigi
(06.11.2022, 11:07)maninweb schrieb: [ -> ]Hallo,

dazu sollten die Daten als UTF8-CSV-Datei exportiert werden. Hier mal ein Beispielcode (WriteUTF8WithoutBOM)

https://stackoverflow.com/questions/6952...-excel-vba

Gruß

Guten Tag!

Vielen Dank. Ich habe mich zwar in meiner Jugend viel mit Programmieren beschäftigt, aber ich bin da aktuell sehr zurückgeblieben. D.h. ich kann die Codes nicht ohne Weiteres inhaltlich nachvollziehen. Kann ich meinem o.g. Programmcode nicht einfach eine Zeile hinzufügen, um den Export im UTF8-Format zu erzwingen? 

Danke und Gruß
(06.11.2022, 11:08)Sigi.21 schrieb: [ -> ]Hallo,

du musst die Textdatei im Format "UTF-8" speichern: FileFormat:=xlCSVUTF8

Gruß Sigi

Guten Tag!

Vielen Dank. Ähnliche Rückfrage wie bereits oben: Kann ich den Befehl "FileFormat:=xlCSVUTF8" einfach irgendwo in meinen Programmcode oben einfügen, um den Export im UTF8-Format zu erzwingen? Oder geht das nicht so einfach...

Danke und Gruß
Hallo,

speichere deine Excel-Datei einmal händisch und lass dabei den Makro-Rekorder mitlaufen.

Dafür braucht man kaum Kenntnisse in Programmierung. Smile

Sabina
... habe genau das in einem anderen Thread gehabt ... ungefähr so muss es aussehen.
PHP-Code:
ActiveWorkbook.SaveAs Filename:= _
    
"C:\Temp\Test.csv"FileFormat:= _
    xlCSVUTF8
CreateBackup:=FalseLocal:=true 'ergibt ";" als Trennzeichen 
Sabina