Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Speichern einer CSV-Datei mit VBA

Speichern einer CSV-Datei mit VBA
22.12.2019 18:20:59
Niclaus
Hallo
Ich habe eine CSV-Datei ("LA_test2.csv") mit Personaldaten, die ich im Snapform-Viewer für "Daten importieren" brauche.
Das klappt bestens, wenn ich die CSV-Datei nach Aenderungen manuell speichere. Ich erhalte dann die Meldung/Frage: "Einige Features … gehen möglicherweise verloren … - Möchten Sie das Format trotzdem verwenden?" – Ich bestätige mit "Ja".
Ich möchte diese CSV-Datei aber mit VBA speichern und habe es mit folgendem Makro in der PERSONAL.XLSB versucht:
    Windows("LA_test2.csv").Activate
Sheets("LA_alle").Select   ' Wenn diese Zeile deaktiviert ist, ändert sich am Ergebnis  _
nichts.
ActiveWorkbook.Save
Die Datei wird ohne Meldung und Frage gespeichert. Aber jetzt streikt der Snapform-Viewer: Er gibt mir nach dem importieren nur ein leeres Formular zurück.
Wenn ich dann die Datei von Hand speichere (mit Meldung und Frage), verarbeitet der Snapform-Viewer die Daten wieder richtig.
Weiss jemand, wie ich die CSV-Datei mit Makro speichern könnte? Vielen Dank und viele Grüsse Niclaus
Falls es jemand interessiert: Ich brauche den Snapform-Viewer für Lohnausweise. Er wird angeboten von der Eidgenössischen Steuerverwaltung.
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Speichern einer CSV-Datei mit VBA
23.12.2019 07:59:35
Oberschlumpf
Hi Niclaus,
ich hab deine Befehle mit einer Bsp-CSV-Datei getestet, und DAS hier kommt dabei raus:
vor dem Speichern mit deinem Code
Userbild
nach dem Speichern mit deinem Code
Userbild
Das Problem könnte sein (so interpretiere ich das Ergebnis), dass Excel nur mit dem Befehl ActiveWorkbook.Save "vergisst", dass die ausgewählte Datei eine CSV-Datei ist.
Funktioniert hat es dann mit diesem Code:

Windows("a - kopie.csv").Activate
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\b.csv", _
FileFormat:=xlCSV, CreateBackup:=False, local:=True

Ok, es wurde "nur" eine Datei unter einem anderen Namen gespeichert. Aber diese Kopie behält das verwendete CSV-Format.
Jetzt müsstest du mit Code nur noch die eigentliche CSV-Datei löschen und den Namen der "neuen" CSV-Datei umbenennen.
Hilfts?
Ciao
Thorsten
Anzeige
AW: Speichern einer CSV-Datei mit VBA
23.12.2019 10:42:56
Herbert
Hallo Niclaus,
probiers mal damit:
ActiveWorkbook.SaveAs fileName:="C:\xxx\xxx.csv", FileFormat:=xlCSVMSDOS, CreateBackup:=False
Servus
AW: Speichern einer CSV-Datei mit VBA
23.12.2019 22:07:18
Niclaus
Grüezi Thorsten, grüezi Herbert
Vielen Dank Euch beiden!
Es klappt bei mir dank der Ergänzung "local:=True", die Thorsten im Code eingesetzt hat, sowohl beim "FileFormat:=xlCSV" wie beim "FileFormat:=xlCSVMSDOS".
Das Makro heisst jetzt bei mir:
Windows("yyy.csv").Activate
' Hier folgen verschiedene Befehle …
' Dann am Ende:
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:="D:\yyy.csv", FileFormat:=xlCSV, CreateBackup:=False, local:= _
True
Application.DisplayAlerts = True

Noch einmal vielen Dank! Ich wünsche Euch frohe Festtage und jetzt schon alles Gute im neuen Jahr
Niclaus
Anzeige
AW: Speichern einer CSV-Datei mit VBA
23.12.2019 23:56:46
Niclaus
Hallo
Ich habe eine weitere Frage zum Oeffnen einer CSV-Datei. Wenn ich die Datei "von Hand" öffne, wird sie in Tabellenform dargestellt:
Userbild
Wenn ich sie mit dem Makro
Workbooks.Open Filename:="D:\yyy.csv"
öffne, wird sie "strichpunkt-separated" dargestellt und bleibt auch beim Speichern so.
Userbild
Diese "strichpunkt-Version" akzeptiert der Snapform Viewer nicht. Er verarbeitet nur eine CSV in Tabellenform.
Wisst Ihr, wie das Open-Makro lauten müsste, damit die CSV in Tabellenform geöffnet wird?
Dank und Gruss Niclaus
Anzeige
AW: Speichern einer CSV-Datei mit VBA
24.12.2019 08:50:17
Oberschlumpf
Hi Niclaus,
bei XL 2013 kenn ich die Menüs nicht mehr genau.
Ich nutze XL 2016.
Eine CSV-Datei öffnest ich über
DATEN/EXTERNE DATEN ABRUFEN/AUS TEXTDATEI
Es öffnet sich der Datai-Öffnen-Dialog, und es werden immer nur Dateien im Textformat zur Auswahl angeboten.
Nun wechsel ich in das Verzeichnis mit meiner CSV-Datei (ist auch nur eine Text-Datei) und wähle diese zum Öffnen aus.
Es öffnet sich der Assistent zum Hinzufügen von Daten aus einer CSV-Datei.
Ich wähle die entsprechenden Parameter aus und lasse den Assistenten seine Arbeit tun.
Nach wenigen Sekunden sind alle Daten aus der CSV-Datei vollständig in die neue Excel-Datei in die richtigen Spalten eingetragen.
Damit du nun den VBA-Code dazu erhältst, starte zuerst den Makrorecorder und führe dann die beschriebenen Schritte aus.
Vergiß am Ende nicht, den Recorder wieder zu beenden.
Hilfts?
Ciao
Thorsten
Anzeige
AW: Speichern einer CSV-Datei mit VBA
24.12.2019 08:50:41
Herbert
Hallo Niclaus,
probiers mal damit:
Sub SaveCSV() '* mit dem Trennzeichen ";" wird die csv spaltenweise erzeugt
Dim Bereich As Object, Zeile As Object, Zelle As Object
Dim sSammelString$, sDateiname$, sTrennzeichen$
sDateiname = "D:\xxx.csv"
sTrennzeichen = ";"
Set Bereich = Tab_7_CSV.UsedRange
Open sDateiname For Output As #1
For Each Zeile In Bereich.Rows
For Each Zelle In Zeile.Cells
sSammelString = sSammelString & """" & CStr(Zelle.Text) & """" & sTrennzeichen
Next
If Right(sSammelString, 1) = sTrennzeichen Then
sSammelString = Left(sSammelString, Len(sSammelString) - 1)
End If
Print #1, sSammelString
sSammelString = ""
Next
Close #1
Set Bereich = Nothing
End Sub
Servus
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Speichern einer CSV-Datei mit VBA


Schritt-für-Schritt-Anleitung

  1. Öffne die gewünschte CSV-Datei: Stelle sicher, dass die Datei geöffnet ist, bevor du das Makro ausführst.

    Windows("LA_test2.csv").Activate
  2. Speichere die Datei als CSV: Verwende den SaveAs Befehl anstelle von Save, um sicherzustellen, dass das richtige CSV-Dateiformat beibehalten wird.

    ActiveWorkbook.SaveAs Filename:="D:\LA_test2.csv", _
    FileFormat:=xlCSV, CreateBackup:=False, local:=True
  3. Deaktiviere Warnmeldungen: Um die Rückmeldung "Einige Features in der Arbeitsmappe gehen möglicherweise verloren" zu vermeiden, kannst du die Warnmeldungen temporär ausschalten.

    Application.DisplayAlerts = False
    ' Speichere hier die Datei
    Application.DisplayAlerts = True

Häufige Fehler und Lösungen

  • Fehler: Leeres Formular im Snapform-Viewer
    Dieser Fehler tritt auf, wenn die Datei nicht im richtigen CSV-Format gespeichert wurde. Stelle sicher, dass du ActiveWorkbook.SaveAs mit dem korrekten FileFormat verwendest.

  • Lösung: Verwende FileFormat:=xlCSV oder FileFormat:=xlCSVMSDOS
    Diese Einstellungen helfen, das korrekte CSV-Datenformat zu erstellen.


Alternative Methoden

  • Verwende den Makro-Recorder: Du kannst auch den Makro-Recorder in Excel nutzen, um die Schritte beim Speichern einer CSV-Datei aufzuzeichnen. Starte den Recorder und führe die Schritte manuell aus.

  • CSV-Datei mit benutzerdefiniertem Trennzeichen speichern: Wenn du ein anderes Trennzeichen wie ein Semikolon verwenden möchtest, kannst du den folgenden Code verwenden:

    Sub SaveCSV()
       Dim Bereich As Object, Zeile As Object, Zelle As Object
       Dim sSammelString$, sDateiname$, sTrennzeichen$
       sDateiname = "D:\xxx.csv"
       sTrennzeichen = ";"
       Set Bereich = ActiveSheet.UsedRange
       Open sDateiname For Output As #1
       For Each Zeile In Bereich.Rows
           For Each Zelle In Zeile.Cells
               sSammelString = sSammelString & """" & CStr(Zelle.Text) & """" & sTrennzeichen
           Next
           If Right(sSammelString, 1) = sTrennzeichen Then
               sSammelString = Left(sSammelString, Len(sSammelString) - 1)
           End If
           Print #1, sSammelString
           sSammelString = ""
       Next
       Close #1
    End Sub

Praktische Beispiele

  1. CSV-Datei speichern:

    Sub SaveAsCSVExample()
       Application.DisplayAlerts = False
       ActiveWorkbook.SaveAs Filename:="D:\example.csv", _
       FileFormat:=xlCSV, CreateBackup:=False, local:=True
       Application.DisplayAlerts = True
    End Sub
  2. Öffnen einer CSV-Datei in Tabellenform:

    Workbooks.Open Filename:="D:\example.csv" ' Achte darauf, wie du die Datei öffnest

Tipps für Profis

  • Verwende lokale Einstellungen: Das local:=True in ActiveWorkbook.SaveAs sichert, dass regionale Einstellungen beim Speichern berücksichtigt werden, was für bestimmte CSV-Formate wichtig sein kann.

  • Backup erstellen: Erstelle immer ein Backup der Originaldatei, bevor du Änderungen vornimmst. Du kannst dies mit CreateBackup:=True in SaveAs machen.


FAQ: Häufige Fragen

1. Wie speichere ich eine CSV-Datei ohne Warnmeldung?
Du kannst die Warnmeldungen mit Application.DisplayAlerts = False deaktivieren, bevor du die Datei speicherst.

2. Warum wird meine CSV-Datei nicht richtig im Snapform-Viewer angezeigt?
Stelle sicher, dass du die Datei im richtigen CSV-Datenformat speicherst. Verwende dafür ActiveWorkbook.SaveAs mit den richtigen FileFormat-Einstellungen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige