Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1480to1484
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

csv Export unvollständig

csv Export unvollständig
16.03.2016 12:14:19
kati
Hallo,
ich habe folgendes Makro zusammengebastelt, um aus einer Excel-Tabelle per Klick auf einen Button automatisch eine csv-Datei auf eine USB-Stick zu speichern. Dabei werden bei allen Zahlen noch Punkte gegen Kommas ausgetauscht und als Trennzeichen zwischen den einzelnen Zellen Semikons eingefügt.
Leider gibt es mit den letzten Zeilen Probleme. Manchmal fehlt die letzte oder auch vorletzte Zeile und in der letzten kopierten Zeile werden nicht alle Zell-werte übertragen. Ich konnte noch keinen Fehler finden, obwohl ich den Tabellen-Umfang und Inhalt schon variiert habe, es an zwei unterschiedlichen Rechnern und mit unterschiedlichen USB-Sticks getestet habe.
Hilfe, seht Ihr den Fehler?
Sub MessDatenExport()  'Diese 

Sub exportiert Tabelle als .csv
Dim DatumZeit As String
'Dim tFile As String
DatumZeit = "_" & Format(Now, "yyyy") & "_" & Format(Now, "mm") & "_" & Format(Now, "dd") & " _
_
_time_" & Format(Now, "hh") & "_" & Format(Now, "nn") & "_" & Format(Now, "ss")
Application.ScreenUpdating = False ' den Bildschirm-Update unterdrücken
Dim ExpFileName As String, ExpPfad As String
Dim Delimiter As String
Dim strZe As String
Dim wert As String
Dim lRow As Long, lCol As Integer
Dim Ze As Long, Sp As Integer
Dim ff As Integer
ExpPfad = "e:\" 'öffnet richtiges Verzeichnis
ExpFileName = ExpPfad & ActiveSheet.Name & DatumZeit & ".csv" 'generiert Dateinamen mit  _
Datum und Zeit
Delimiter = ";"  'das erforderliche Trennzeichen ";"
With ActiveSheet
lRow = .Cells.Find(what:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
lCol = .Cells.Find(what:="*", SearchOrder:=xlByColumns, SearchDirection:=xlPrevious). _
Column
ff = FreeFile 'offener Dateityp
Open ExpFileName For Output As #ff 'hier Datei als offener Dateityp exportiert
For Ze = 1 To lRow            '' Zeile für Zeile lesen und schreiben ...
For Sp = 1 To lCol - 1     'beginnend mit Zeile 1 wird Zelle für Zelle der Inhalt an "  _
_
Wert" übergeben und
wert = .Cells(Ze, Sp)   'alle Punkte durch Kommas ersetzt
wert = Replace(wert, ".", ",")
strZe = strZe & wert & Delimiter    'dann wird der neue Wert an den Zeilenstring  _
angehängt + Semikolon
Next Sp
wert = .Cells(Ze, Sp)      'alles einmal wiederholen für die letzte Zeile
wert = Replace(wert, ".", ",")
strZe = strZe & wert
Print #ff, strZe           'fertige Zeile in csv-Datei kopiert
strZe = ""                 'Zeilen-String leeren und mit neuer Zeile weiterarbeiten
Next Ze
End With
ActiveSheet.Range("A1").Select
Application.ScreenUpdating = True        'aktiviert den Bildschirm-Update
End Sub
Unter diesem Pfad ist eine Beispieldatei mit Daten:
"https://www.herber.de/bbs/user/104375.xlsm"

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: csv Export unvollständig
16.03.2016 12:32:35
Werner
Hallo Kati,
solltest du Excel nicht mitteilen, wo die letzte Zeile/Spalte ermittelt werden soll?
With ActiveSheet
lRow=.Columns(1).Find(what:="?*",LookIn:=xlValues,lookat:=xlWhole,searchdirection:=xlPrevious). _
Row
lCol=.Rows(1).Find(what:="?",LookIn:=xlValues,lookat:=xlWhole,searchdirektion:=xlPrevious).Column
Im Beispiel wird die letzte Zeile in Spalte A und die letzte Spalte in Zeile 1 gesucht.
Gruß Werner

kleines Detail
16.03.2016 14:26:58
Michael
Hi zusammen,
Daniels Vorschlag besticht natürlich durch seine Einfachheit.
Hier nur der Vollständigkeit halber eine andere Schreibweise für die innere Schleife:
         For sp = 1 To lcol   ' ohne minus 1
wert = .Cells(Ze, sp)   'alle Punkte durch Kommas ersetzt
wert = Replace(wert, ".", ",")
strze = strze & wert
If sp 
Und: es sollte schneller gehen, wenn man alle Werte zunächst in ein Array steckt.
Schöne Grüße,
Michael

Anzeige
AW: kleines Detail
16.03.2016 18:38:08
kati
Danke, super Antwort. Mit dem Close funktioniert es jetzt. Der Vorschlag mit SaveAs ist wirklich schön. Hatte ich vorher auch schon getestet. Local true kann ich aber nicht verwenden, weil bei dem Rechner alles auf Englisch eingestellt ist, damit unsere Messoftware richtig läuft.
Vielen, vielen Dank!
Kati

AW: csv Export unvollständig
16.03.2016 12:32:36
Daniel
Hi
ich sehe da jetzt auch keinen Fehler, allerdings fehlt ein ordnungsgemäßer Abschluss mit Close #ff
allerdings würde ich da nicht so aufwenig programmieren, sondern den Inhalt des Blattes in eine neue Datei kopieren und diese mit SaveAs und FileFormat:=xlCSV als solche Datei abspeichern.
Damit auch die Deutschen CSV-Einstellungen verwendet werden (Semikolon als Trenn- und Komma als Dezimalzeichen), kannst du zusätzlich die Option Local:=True verwenden:
ActiveSheet.Copy
ActiveWorkbook.SaveAs FileName:="hier Pfad und Dateiname", Fileformat:=xlCSV, Local:=True
ActiveWorkbook.Close False
das ActiveSheet.copy kopiert das Tabellenblatt in eine neue Datei, diese wird dann als CSV gespreichert.
Gruß Daniel

Anzeige
AW: csv Export unvollständig
16.03.2016 18:35:30
kati
Danke, super Antwort. Mit dem Close funktioniert es jetzt. Dein Vorschlag mit SaveAs ist wirklich schön. Hatte ich vorher auch schon getestet. Local true kann ich aber nicht verwenden, weil bei dem Rechner alles auf Englisch eingestellt ist, damit unsere Messoftware richtig läuft.
Vielen, vielen Dank!
Kati

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige