Clever-Excel-Forum

Normale Version: Makro zum Erstellen einer csv-Datei
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich habe eine kleine EXCEL-Datei. Aus dieser werden per Makro einzelne Zeilen kopiert und in neue Dateien eingefügt, die als csv-Datei unter vorgegebenen Namen abgespeichert werden. Die csv-Dateien müssen dann in einer anderen Anwendung weiterverarbeitet werden.

Das Kopieren und die Dateibenennung funktionieren. Auch erhalten die Dateien die Endung .csv. Die Dateien werden aber im Dateityp Excel-Arbeitsmappe (*.xlsx) abgespeichert. Ich bentötige aber zwingend csv.

Auszu aus meinem Makro:


....
For i = ersteZeile To letzteZeile
        If Cells(i, 1) = "" Then
            i = i + 1
        End If
       
        dateiname = Cells(i, 2).Value & ".csv"
       
        dateiname = Replace(dateiname, "*", "-")
        dateiname = Replace(dateiname, "\", "-")
        dateiname = Replace(dateiname, "/", "-")
        dateiname = Replace(dateiname, "?", "-")
       
             
       
        neuerpfad = pfad & "\" & Dateiname


...

Was muss ich ändern, damit auch der Dateityp "csv" steht?

Danke

Viele Grüße

Versuchnix
Hallo Versuchnix alter Gallier,

poste doch mal die entscheidenden Teile deines Codes.
Wie sieht Dein Save-Befehl aus?

Gruß,
Lutz
Hallo,

ich habe doch einen Auszug aus meinem Makro beigefügt (nach den drei Doppelpunkten ...)
Hallo Versuchnix,

aber das ist doch nur der Teil, der die Zellinhalte in Dateinamen inkl. Pfad umwandelt.

Irgendwo muss es doch einen Befehl Worbook.SaveAs o.ä. geben. Erst hier wird final festgelegt, in welchem Format Deine Datei wirklich gespeichert wird.

Gruß,
Lutz
Hallo,

jetzt das Makro mit dem Speicher-Befehl
For i = ersteZeile To letzteZeile
        If Cells(i, 1) = "" Then
            i = i + 1
        End If
       
        dateiname = Cells(i, 2).Value & ".csv"
       
        dateiname = Replace(dateiname, "*", "-")
        dateiname = Replace(dateiname, "\", "-")
        dateiname = Replace(dateiname, "/", "-")
        dateiname = Replace(dateiname, "?", "-")
       
             
       
        neuerpfad = pfad & "\" & dateiname
       
        ActiveSheet.Cells(i, 1).Select
        d = Range(Selection, Selection.End(xlDown).Rows).Rows.Count - 2
       
       
        If Cells(i + 1, 1) = "" Then
        ActiveSheet.Range(Cells(i, 3), Cells(i + d, 7)).Copy
        Else
        ActiveSheet.Range(Cells(i, 3), Cells(i, 7)).Copy
       
        End If
       
        Workbooks.Add
        Range("A1").PasteSpecial
       
       
       
        ActiveWorkbook.SaveAs Filename:=neuerpfad
       
       
        ActiveWorkbook.Close



Viele Grüße Versuchnix
Hallo Versuchnix,

ich habe jetzt versucht Deinen Code nachustellen. Bei mir kommt eine .csv-Datei bei raus.

Erste Möglichkeit:
Ändere Deinen Save-Zeile in
ActiveWorkbook.SaveAs Filename:=neuerpfad, FileFormat:=xlCSVUTF8
Das ist zumindest das, was mir mein Makrorecorder als FileFormat ausspuckt.

Zweite Möglichkeit:
Dein Wert für neuerpfad wird durch die replace-Befehle verwurschtelt.
Entweder Du schaust Dir im Einzelschriffmodus an, wie die Variable vor dem Speichern aussieht oder du fügst ein
Debug.Print neuerpfad
nach der Zeile
neuerpfad = pfad & "\" & dateiname
ein.

Gruß,
Lutz
Hallo,

wenn ich den Befehl
ActiveWorkbook.SaveAs Filename:=neuerpfad,

ändere in
ActiveWorkbook.SaveAs Filename:=neuerpfad, FileFormat:=xlCSVUTF8

erhalte ich folgende Fehlermeldung: xlCSVUTF8 "Fehler beim Kompilieren Variable nicht definiert".


Ich habe es daraufhin versucht mit
ActiveWorkbook.SaveAs Filename:=neuerpfad, FileFormat:=xlCSV (also ohne den Zusatz UTF8)
Es wird dann auch die neue Datei in der gewünschten Struktur erstellt, allerdings mit folgender Meldung:

Sollen Ihre Änderungen in ...csv gespeichert werden?

Wenn ich "Speichern" oder "Nicht speichern" drücke, erfolgt die Speicherung-  Beim nächste Datensatz wird die gleichen Frage gestellt.

Ich habe über den Makrolauf alle Dateien erstellen lassen und jeweils mit Speichern oder Nicht speichern bestätigt. Es wurden alle Dateien mit csy-Endung und dem Datei-Typ csv erstellt. Allerdings wurden die Einträge einer Zeile als string abgespeichert und nicht mehr in fünf nebeneinander liegende Zellen, wie gewünscht.

Drücke ich statt auf "Speichern" oder "Nicht speichern" auf "Abbrechen" bleibt die erste erstellte csv-Datei in der gewünschten Struktur und mit dem Dateityp bestehen. Das Makro läuft dann aber nicht mehr weiter und folgende Fehlermeldung erscheint "Laufzeitfehler (6) Überlauf"

Gruß

Versuchnix
Hallo Versuchnix,

hast Du mal den Code zum Speichern als .csv aufgezeichnet?
Was steht dann bei Dir im Code?

Wa ssagt die zweite Möglichkeit?
Hast Du deinen Code mal im Einzelschritt laufen lassen?

Gruß,
Lutz