Registriert seit: 07.09.2017
Version(en): Microsoft 365
Hallo zusammen, ich habe das unten stehende Makro das auch wunderbar funktioniert: Code: Sub mtrXportCSV() Dim rngBereich As Range Dim rngZeile As Range Dim rngZelle As Range Dim strTemp As String Dim strDateiname As String Dim lenString As Long
Const strPfad As String = "XXXX" Const strErweiterung As String = ".csv" Const strTrennzeichen As String = ";" strDateiname = "Import"
Set rngBereich = ActiveSheet.Range("A1:B40") Open strPfad & strDateiname & strErweiterung For Output As #1
For Each rngZeile In rngBereich.Rows For Each rngZelle In rngZeile.Cells If IsEmpty(rngZelle) Then Exit For End If If InStr(1, rngZelle.Text, ";") > 0 Then 'Zellen, die ein Semikolon beinhalten in Anführungsstriche setzen 'strTemp = strTemp & """" & CStr(rngZelle.Text) & """" & strTrennzeichen Else strTemp = strTemp & CStr(rngZelle.Text) & strTrennzeichen End If Next If Len(strTemp) > 0 Then strTemp = Left(strTemp, Len(strTemp) - 1) Print #1, strTemp End If strTemp = "" Next
Close #1 Set rngBereich = Nothing MsgBox "Export fertig" End Sub
Jetzt brauche ich eigentlich "nur" noch, dass mir das Makro die .csv Datei nicht als ANSI (momentan so) abspeichert, sondern im UTF-8 Format abspeichert. Könnt ihr mir dabei helfen das obere Makro dahingehend zu optimieren?
Registriert seit: 08.05.2014
Version(en): Office 2010, Office 365, Office 365 Betakanal
Hallo, hier eine Variante per ADODB.Stream, aufbauend auf Deinen Code und die UTF8-Dateien mit BOM erzeugt ... Code: Sub mtrXportCSV() Dim rngBereich As Range Dim rngZeile As Range Dim rngZelle As Range Dim strTemp As String Dim strDateiname As String Dim strData As String Dim lenString As Long Dim objStream As Object Const strPfad As String = "D:\Downloads\" Const strErweiterung As String = ".csv" Const strTrennzeichen As String = ";" strDateiname = "Import" Set rngBereich = ActiveSheet.Range("A1:B40") For Each rngZeile In rngBereich.Rows For Each rngZelle In rngZeile.Cells If IsEmpty(rngZelle) Then Exit For End If If InStr(1, rngZelle.Text, ";") > 0 Then ' Zellen, die ein Semikolon beinhalten in Anführungsstriche setzen ' strTemp = strTemp & """" & CStr(rngZelle.Text) & """" & strTrennzeichen Else strTemp = strTemp & CStr(rngZelle.Text) & strTrennzeichen End If Next If Len(strTemp) > 0 Then strData = strData & IIf(Len(strData) > 0, vbCrLf, "") & _ Left(strTemp, Len(strTemp) - 1) End If strTemp = "" Next If Len(strData) > 0 Then Set objStream = CreateObject("ADODB.Stream") If Not objStream Is Nothing Then objStream.Type = 2 objStream.Charset = "utf-8" objStream.Open objStream.WriteText strData objStream.SaveToFile strPfad & strDateiname & strErweiterung, 2 MsgBox "Export fertig" Else MsgBox "Stream konnte nicht erzeugt werden." End If Set objStream = Nothing Else MsgBox "Keine Daten." End If Set rngBereich = Nothing End Sub
Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awardshttps://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Registriert seit: 07.09.2017
Version(en): Microsoft 365
Wow, richtig gut.
Vielen Dank dir. Funktioniert perfekt!!
Jetzt ist mir nur noch eine letzte Sache aufgefallen (das liegt aber am Original Code): Ist es möglich, dass jedes Komma, dass in der erstellten .csv Datei vorhanden ist durch einen Punkt ersetzt wird?
Auch hier nochmal vielen Dank schon im Voraus!
Registriert seit: 08.05.2014
Version(en): Office 2010, Office 365, Office 365 Betakanal
07.02.2020, 10:52
(Dieser Beitrag wurde zuletzt bearbeitet: 07.02.2020, 10:52 von maninweb.)
Hallo, versuche es mal wie folgt, indem Du die entsprechende Zeile ersetzt ... Code: objStream.WriteText Replace(strData, ",", ".")
Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awardshttps://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Registriert seit: 07.09.2017
Version(en): Microsoft 365
07.02.2020, 11:01
(Dieser Beitrag wurde zuletzt bearbeitet: 07.02.2020, 11:02 von DeLaGhetto.)
Einfach zu gut. Ihr seid die Besten. Hat perfekt funktioniert. Vielen Dank für die super Hilfe. Zur Info hier nun der neue Code, falls jemand das gleiche Problem haben sollte: Code: Sub mtrXportCSV() Dim rngBereich As Range Dim rngZeile As Range Dim rngZelle As Range Dim strTemp As String Dim strDateiname As String Dim strData As String Dim lenString As Long Dim objStream As Object Const strPfad As String = "Hier kommt der Pfad hin" Const strErweiterung As String = ".csv" Const strTrennzeichen As String = ";" strDateiname = "Import" Set rngBereich = ActiveSheet.Range("A1:B40") For Each rngZeile In rngBereich.Rows For Each rngZelle In rngZeile.Cells If IsEmpty(rngZelle) Then Exit For End If If InStr(1, rngZelle.Text, ";") > 0 Then Else strTemp = strTemp & CStr(rngZelle.Text) & strTrennzeichen End If Next If Len(strTemp) > 0 Then strData = strData & IIf(Len(strData) > 0, vbCrLf, "") & _ Left(strTemp, Len(strTemp) - 1) End If strTemp = "" Next If Len(strData) > 0 Then Set objStream = CreateObject("ADODB.Stream") If Not objStream Is Nothing Then objStream.Type = 2 objStream.Charset = "utf-8" objStream.Open objStream.WriteText Replace(strData, ",", ".") 'objStream.WriteText strData objStream.SaveToFile strPfad & strDateiname & strErweiterung, 2 MsgBox "Export fertig" Else MsgBox "Stream konnte nicht erzeugt werden." End If Set objStream = Nothing Else MsgBox "Keine Daten." End If Set rngBereich = Nothing End Sub
Registriert seit: 29.09.2015
Version(en): 2030,5
07.02.2020, 12:35
(Dieser Beitrag wurde zuletzt bearbeitet: 07.02.2020, 12:35 von snb.)
Oder: PHP-Code: Sub M_snb() Range("A1:B40").Copy With GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}") .GetFromClipboard c00 = Replace(.GetText, vbTab, ".") End With
With CreateObject("ADODB.Stream") .Type = 2 .Charset = "utf-8" .Open .writetext c00
.SaveToFile "G:\OF\__UTF8_ADODB.csv", 2 .Close End With End Sub
Registriert seit: 07.09.2017
Version(en): Microsoft 365
Also bei mir kommt ein Fehler bei:
Registriert seit: 29.09.2015
Version(en): 2030,5
07.02.2020, 15:44
(Dieser Beitrag wurde zuletzt bearbeitet: 07.02.2020, 15:44 von snb.)
dann ist Range("A1:B40") leer.
Registriert seit: 07.09.2017
Version(en): Microsoft 365
Nein, ist nicht leer. Allerdings sind die Zellen nicht als Text Formatiert. Wenn ich die als Text formatieren, dann funktioniert das Makro auch.
Danke
|