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"