Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
Anzeige
Archiv - Navigation
912to916
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
912to916
912to916
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

CSV erstellen ohne Umbruch in letzter Zeile

CSV erstellen ohne Umbruch in letzter Zeile
01.10.2007 14:24:00
AndreasKehr
Hallo an alle,
ich benötige mal wieder eue Hilfe.
Mittels einem Makro erstelle ich aus einem Bestimmten Arbeitsblatt eine CSV-Datei die unter Stammdaten.txt abgespeichert wird. In dieser Datei darf in der letzten Zeile kein Zeilenumbruch mehr stattfinden. Diese Datei wird weiterverarbeitet und dadurch kommt es zu Fehlermeldungen.
Hier mal das benutzte Makro:

Sub SaveCSV_test()
' Speichert den Inhalt eines Arbeitsblatts als CSV-Datei
' in vier unterschiedliche verzeichnisse
' mit wählbarem Trennzeichen und Maskierung von Einträgen
Dim Bereich As Object, Zeile As Object, Zelle As Object
Dim strTemp As String
Dim strDateiname As String
Dim strTrennzeichen As String
Dim strMappenpfad As String
strMappenpfad = ActiveWorkbook.FullName
strMappenpfad = Replace(strMappenpfad, ".xls", ".csv")
' Namen und Speicherpfad wählen
strDateiname = "\\Datsi\Datsi-Druck-Prod\MDE-Prod\MDE01_kehr\stammdaten.txt"
If strDateiname = "" Then Exit Sub
'strTrennzeichen = Angabe des vTrennzeichens
strTrennzeichen = ";"
If strTrennzeichen = "" Then Exit Sub
'Zu exportierender Bereich festlegen
Set Bereich = Worksheets("scanner_stamm").UsedRange
Open strDateiname For Output As #1
For Each Zeile In Bereich.Rows
For Each Zelle In Zeile.Cells
If InStr(1, Zelle.Text, strTrennzeichen) > 0 Then
'Zellen, die ein Trennzeichen beinhalten in Anführungsstriche setzen
strTemp = strTemp & """" & CStr(Zelle.Text) & """" & strTrennzeichen
Else
strTemp = strTemp & CStr(Zelle.Text) & strTrennzeichen
End If
Next
If Right(strTemp, 1) = strTrennzeichen Then strTemp = Left(strTemp, Len(strTemp) - 1)
Print #1, strTemp
strTemp = ""
Next
Close #1
Set Bereich = Nothing
MsgBox "Datei wurde exportiert nach" & vbCrLf & strDateiname
End Sub


Die erstellte txt Datei sieht folgendermassen aus:
0104250220300190;12;A33 A2 ;500
0104250220300275;12;A38 A1 ;450
0104250220300305;12;A38 A2 ;450
0104250220300343;12;A43 A1 ;350
0104250220300374;12;A43 A2 ;350

Ich hoffe ihr könnt mir helfen
Grüsse Andreas

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CSV erstellen ohne Umbruch in letzter Zeile
02.10.2007 11:54:17
Luschi
Hallo Andreas,
habe mal ein bischen gestestet, aber mit Vba-Mitteln habe ich die letzte Leerzeile auch nicht wegbekommen.
In VB6 gibt es ein ByteArray-Objekt: dahinein kann man 1 Datei einlesen und auch wieder in 1 Datei schreiben. Hiermit ist es möglich Bytes aus- und abzuschneiden, so daß in der neuen Datei eben die letzten 2 Bytes fehlen. Excel hängt eben am Schluß der Datei noch 2 Steuerzeichen (13 und 10) automatisch an, die nun dem Fremdprogramm stören.
Leider hat M$ viele Möglichkeiten von Vb6 nicht in Vba umgesetzt. Ich bin am Donnerstag wieder an meinem Heim-PC und ich schicke Dir dann eine exe-Datei, die die letzten Zeichen abklemmt und die Du in Deinem Vba-Code einbinden kannst.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: CSV erstellen ohne Umbruch in letzter Zeile
02.10.2007 12:23:47
Harry
Hallo Andreas,
mit "Print #1, strTemp;" (beachte Semikolon am Ende) schreibst du ohne Zeilenumbruch.
D.h. entweder prüfe auf letzte Zeile und schreibe dann mit oder ohne Semikolon oder schreibe sinngemäß

bolErsteZeile = true
For Each Zeile In Bereich.Rows
For Each Zelle In Zeile.Cells
If InStr(1, Zelle.Text, strTrennzeichen) > 0 Then
'Zellen, die ein Trennzeichen beinhalten in Anführungsstriche setzen
strTemp = strTemp & """" & CStr(Zelle.Text) & """" & strTrennzeichen
Else
strTemp = strTemp & CStr(Zelle.Text) & strTrennzeichen
End If
Next
If Right(strTemp, 1) = strTrennzeichen Then strTemp = Left(strTemp, Len(strTemp) - 1)
If bolErsteZeile then
bolErsteZeile = false
Else
Print #1,  ' Erzeugt neue Leerzeile, da vorangegange nicht mit Zeilenumbruch
' abgeschlossen wurde, erzeugt dies hier quasi nur den
' Zeilenumbruch des vorangegangen Datensatzes
End If
Print #1, strTemp;  ' Achtung - mit Semikolon
strTemp = ""
Next


Siehe Hilfe zu Befehl "Print" - Argument "ZeichenPos"
Gruß
Harry

Anzeige

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige