Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Ausgewählte Arbeitsmappe als CSV-Datei speichern

Ausgewählte Arbeitsmappe als CSV-Datei speichern
07.02.2018 13:00:55
Anka
Hallo Ihr lieben Helfer,
ich brauche unbedingt Eure Hilfe für mein Tool meiner Masterarbeit: Ich habe ein kleines Makro geschrieben, das nur eine Arbeitsmappe ("Zieltabelle") aus einer Exceldatei als CSV-Datei speichern soll.
Das Problem ist, dass die Textboxen auf einer anderen Arbeitsmappe ("Auswahlmaske") erscheinen sollen. Gespeichert werden soll im Anschluss die Arbeitsmappe ("Zieltabelle")-
Dabei gibt es folgende Textboxen:
1. "Soll die Datei als CSV-Datei gespeichert werden?"
--> bei "Ja" soll die Datei an einem festen Speicherort gespeichert werden, allerdings soll der Nutzer den Dateinamen selber eingeben können, sodass der Speicherort fix bleibt und nur der Dateiname veränderbar ist
--> bei "Nein": kommt die 2. Textbox:
2. "Zur weiteren Verarbeitung in QGIS muss das Ergebnis im CSV-Format gespeichert _
werden. Wollen Sie das Ergebnis als CSV-Datei speichern?"?"
--> bei "Ja" soll das Fenster "Speichern unter" aufgehen, wo der Nutzer die Datei beliebig abspeichern kann
--> bei "Nein" soll das gar nichts passieren.
Folgende Probleme treten bei meinem Code auf:
1)Bei mir funktioniert nicht, dass ich mehrere Workbooks in einem Code verwenden kann
2)Nicht die Mappe "Zieltabelle" wird als CSV-Datei abgespeichert, sondern die ganze Excel-Datei wird an den angegbenen Ort als CSV-Datei gespeichert.
3) Die Textboxen öffnen sich nicht auf dem richtigen Arbeitsblatt
Hier ist mein Code dazu:

Sub Datei_speichern()
'    Dim wsAuswahlmaske As Worksheet
'    Dim wsZiel As Worksheet                                'Variable: Zieldatei anlegen
'    Set wsZiel = Worksheets("Zieltabelle")           'Variable: Zieldatei "Zieltabelle"  _
festlegen
'    Set wsAuswahlmaske = Worksheets("Auswahlmaske")
Dim wbZieltabelle As Workbook
Dim wbAuswahlmaske As Variant
Dim dateiname As String
'* CSV-Datei
If MsgBox("Zur weiteren Verarbeitung in QGIS muss das Ergebnis im CSV-Format gespeichert  _
werden. Wollen Sie das Ergebnis als CSV-Datei speichern?", vbYesNo) = vbYes Then
dateiname = InputBox("Dateiname:")
If dateiname = "" Then
MsgBox "Dateiname ist ungültig!"
Exit Sub
End If
With wbZieltabelle
wbZieltabelle.Copy
wbZieltabelle.SaveAs "C:\Users\GIS\Desktop\Exceltool_Ergebnis\CSV-Dateien" & dateiname & ".  _
_
csv"
End With
With wbAuswahlmaske
wbAuswahlmaske.MsgBox("Datei wurde als CSV-Datei gespeichert!", vbOK) = vbOK                 _
_
'Hinweis wo Ergebnis gespeichert wurde
wbAuswahlmaske.MsgBox("Zur weiteren Verarbeitung in QGIS muss das Ergebnis im CSV-Format  _
gespeichert werden. Wollen Sie das Ergebnis als CSV-Datei speichern?", vbYesNo) = vbNo
ActiveWorkbook.MsgBox("Wollen Sie das Ergebnis als Excel-Datei speichern?", vbYesNo) =  _
vbYes
End With
With wbZieltabelle
fileToOpen = Application.GetOpenFilename("Microsoft Excel-Dateien (*.xls), *.xls")
Pfad.Text = fileToOpen
ActiveWorkbook.MsgBox("Datei wurde als CSV-Datei gespeichert!", vbOK) = vbOK
End With
With wbAuswahlmaske
ActiveWorkbook.MsgBox("Wollen Sie das Ergebnis als Excel-Datei speichern?", vbYesNo) = vbNo
End With
'ActiveWorkbook.Close False
End If
End Sub
Vielen Dank für eure Untersützung!
VG, Anka
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ausgewählte Arbeitsmappe als CSV-Datei speichern
08.02.2018 04:05:05
Rainer
Hallo Anka,
zu 1.
Es scheint mir, dass du stellenweise "Workbook" und "Worksheet" verwechselst. "Book" ist die Excelmappe, vereinfacht gesagt die Datei welche du speicherst. "Sheet" ist das Excelblatt, also die verschiedenen Seiten innerhalb deiner Mappe. Öffnest du verschiedene Exceldateien für dein Makro oder läuft alles innerhalb einer Datei ab? Im ersten fall ist dein "ActiveWorkbook" fast schon kriminell. Außderdem musst du dann bei solchen Zuweisungen auch die Mappe ("Datei") angeben:
Set wsZiel = Worksheets("Zieltabelle")

muss so aussehen
Set wsZiel = Workbook("MeineDatei.xlsx").Worksheets("Zieltabelle")
zu 2.
meine ganz private Erfahrung mit Excel ist die, dass Excel und CSV nicht unbedingt gute Freunde sind. Ich erstelle meine CSV so:

Dim Export 'As Worksheet
Dim ExportString, TimeStamp
Dim i, ExportRow as Integer
Dim LC, LR As Long
Set Export = ThisWorkbook.Sheets("EXPORT")
'Make Exportfile
ExportFile = ThisWorkbook.Path & "\Excel_Export_" & TimeStamp & ".csv"
LR = Export.Cells(Export.Rows.Count, "A").End(xlUp).Row
'Write the first headerline
LC = Export.Cells(1, Export.Columns.Count).End(xlToLeft).Column
For i = 1 To LC
If ExportString  "" Then
ExportString = ExportString & "," & Export.Cells(1, i)
Else
ExportString = Export.Cells(1, i)
End If
Next i
Open ExportFile For Output As #1        'The first use of the file must use "OUTPUT"
Print #1, ExportString
Close #1
ExportString = ""
'Write the data
For ExportRow = 2 To LR
For i = 1 To LC
If ExportString  "" Then
ExportString = ExportString & "," & Export.Cells(ExportRow, i)
Else
ExportString = Export.Cells(ExportRow, i)
End If
Next i
Open ExportFile For Append As #1        'The second (and further) use of the file must use " _
APPEND"
Print #1, ExportString
Close #1
Next ExportRow
3. Weder "wbZieltabelle" noch "wbAuswahlmaske" werden definiert. Außerdem (siehe 1.) benutzt du verschiedenste Varianten zum Aufruf:

MsgBox "Dateiname ist ungültig!"
ActiveWorkbook.MsgBox("Datei wurde als CSV-Datei gespeichert!", vbOK) = vbOK
wbAuswahlmaske.MsgBox("Datei wurde als CSV-Datei gespeichert!", vbOK)

wobei die erste und zweite Variante eigentlich das gleiche tun. Ohne Angabe einer Mappe benutzt Excel standardmäßig das "ActiveWorkbook". Hier musst du aufpassen, denn es gibt zusätzlich noch "ThisWorkbook". Dies bezeichnet immer die Mappe, aus welcher dein VBA-Code gestartet wurde.
Ich empfehle deinen Code aufzuräumen und entweder "ActiveWorkbook / ThisWorkbook" zu benutzen oder alle Mappen (Dateien) entsprechend du definieren:

Dim wbZieltabelle As Workbook
Set wbZieltabelle = ActiveWorkbook
'oder alternativ
'Set wbZieltabelle = Workbook("MeineZielDatei.xlsx")
Wenn du weitere Hilfe brauchst, dann wäre auch eine Beispielmappe ganz hilfreich.
Gruß,
Rainer
Anzeige
AW: Ausgewählte Arbeitsmappe als CSV-Datei speichern
08.02.2018 09:02:09
Anka
Hallo Rainer,
vielen Dank für Deine vielen Hilfestellungen! Ich kenne mich mit VBA eigentlich überhaupt nicht aus und habe den Code irgendwie zusammengebastelt, daher ist er für Dich so "kriminell" :D
Ich brauche das aber für meine Masterarbeit, daher quäle ich mich hier durch....
Ich arbeite immer nur in einer Excel-Datei und darin sind verschiedene Mappen. Im Endeffekt möchte ich einfach nur, dass die Mappe "Zieltabelle", in der sehr viele Daten enthalten sind, als CSV-Datei gespeichert wird. Das soll per Button funktioneren.
Die Excel-Datei soll so wie sie ist bestehen bleiben, d.h. ich möchte nur, dass ein Blatt aus der Excel-Datei als CSV-Datei per Button-Click gespeichert/exportiert wird und dann soll der Nutzer wieder im Excel-Dokument weiterarbeiten können.
Im Moment ist es bei mir noch so, dass die ganze Datei dann als CSV-Datei gespeichert wird und das möchte ich eben nicht.
Ehrlich gesagt verstehe ich nicht was das alles heißt in deinem Code, weil ich mich, wie gesagt, damit nicht auskenne. Gibt es keinen einfacheren Code? Bzw wie kann ich das mit meinen Bezeichnungen verbinden, denn im Moment hört der Code nicht auf, sondern die Schleife springt immer wieder auf den Anfang zurück...?
Vielen Dank für Deine Mithilfe!
VG, Anka
Anzeige
AW: Ausgewählte Arbeitsmappe als CSV-Datei speichern
08.02.2018 09:31:54
Rainer
Hallo Anka,
ich sag mal so: Willkommen im Club. Meine Einstellung zu VBA war im Studium auch nicht anders.
Aber ich kann dir versprechen, dass man damit auch nach der Masterarbeit noch tolle Sachen machen kann.
Wegen deinem aktuellen Problem nochmal die Bitte: Lade deine Datei mal hoch. Ich kann dir zwar hier online weiter den Quelltext "versaubeuteln", aber wir sind schneller wenn ich es auch direkt in deiner Datei ausprobieren kann.
"Mein" Code (der ist auch nur zusammengeklaut) zum Export ist eigentlich recht simpel. Ich versuche es mal zu erklären:

'Variablendeklaration
Dim Export 'As Worksheet
Dim ExportString, dateiname
Dim i, ExportRow as Integer
Dim LC, LR As Long
Set Export = ThisWorkbook.Sheets("EXPORT")
'Lege fest, welches Blatt EXPORT sein soll
'Erstelle Exportdatei
dateiname = InputBox("Dateiname:")
If dateiname = "" Then
MsgBox "Dateiname ist ungültig!"
Exit Sub
End If
ExportFile = ThisWorkbook.Path & "\" & dateiname & ".csv"
'Pfad und Dateiname des Export
LR = Export.Cells(Export.Rows.Count, "A").End(xlUp).Row
'Ermittle Letzte Zeile in EXPORT, Spalte A
'Erste Zeile exportieren
LC = Export.Cells(1, Export.Columns.Count).End(xlToLeft).Column
'Ermittle Letzte Spaltein EXPORT, Zeile 1
For i = 1 To LC
'Schleife über alle Spalten
If ExportString  "" Then
'Der ExportString wird Zellenweise befüllt. Die erste Spalte soll kein Trennzeichen  _
haben.
ExportString = ExportString & "," & Export.Cells(1, i)
'Das Komma ist das CSV Trennzeichen
Else
'Das ist die erste Spalte
ExportString = Export.Cells(1, i)
End If
Next i
Open ExportFile For Output As #1
'Beim ersten Schreiben in die Exportdatei muss die Option "OUTPUT" benutzt werden.
Print #1, ExportString
Close #1
'Schließe Exportdatei wieder
ExportString = ""
'Leere den Exportstring, damit eine neue Zeile beginnen kann ohne Trennzeichen
'Weitere Zeilen exportieren
For ExportRow = 2 To LR
'Schleife für Zeile 2 bis Letzte Zeile
For i = 1 To LC
'Schleife über alle Spalten, wie beim erstem Mal
If ExportString  "" Then
ExportString = ExportString & "," & Export.Cells(ExportRow, i)
Else
ExportString = Export.Cells(ExportRow, i)
End If
Next i
Open ExportFile For Append As #1
'Ab dem zweiten Schreiben in die Exportdatei muss die Option "OUTPUT" benutzt werden.
Print #1, ExportString
Close #1
'Schließe Exportdatei wieder
ExportString = ""
'Leere den Exportstring, damit eine neue Zeile beginnen kann ohne Trennzeichen
Next ExportRow
Das Öffnen und schließen der Datei erzeugt die Zeilenumbrüche.
Es speichert die CSV Datei im gleichen Pfad wie die Excel-Datei ab.
Bei weiteren Fagen melde dich.
Gruß,
Rainer
Anzeige
AW: Ausgewählte Arbeitsmappe als CSV-Datei speichern
08.02.2018 10:52:22
Anka
Hallo Rainer,
ich bin echt happy, dass so hilfsbereit bist, denn ich sitze schon einige Wochen an meinem Excel-Tool dran und so langsam komme ich in Zeitdruck....
Also im Endeffekt man Tool folgendes (alles in einer Excel-Datei): In dem Blatt "Auswahlmaske" kann der Anwender verschiedene Eingaben machen, wonach ein Datensatz (anderes Excelblatt) gefiltert wird. Dieser Datensatz wird dann in das Blatt "Zieltabelle" eingefügt. Jetzt soll der Anwender über einen Button dieses Filterergebnis als CSV-Datei abspeichern können. Und da liegt jetzt mein Problem!
Ich denke das Problem ist, dass der Datensatz unterschiedlich groß ist (90 Zeilen - circa 400.000 Zeilen), sodass ich da keine feste Vorgabe machen kann, außer bspw. Range("$A$1:$Z$400000"); aber ich denke so gut ist das nicht.
Ich habe jetzt den Code weng überarbeitet und versucht in Deinen Code einzufügen. Aber es funktioniert leider immer nicht :(((.
Hier der überarbeitete Code und im Anhang nur ein Auszug aus dem Excel-Blatt, da die Datei riesig ist:

Sub Datei_speichern()
'* Definition meiner Variablen
Dim wsAuswahl As Worksheet
Dim wsZiel As Worksheet
Dim rng_Zieltabelle As Range
'Dim str_alterName As String
'Dim neuerName As String
Dim Workbook As Workbook
Dim strDateiname As String
Dim strDateiort As String
Set Workbook = ThisWorkbook
Set wsAuswahl = Worksheets("Auswahlmaske")
Set wsZiel = Worksheets("Zieltabelle")
Set rng_Zieltabelle = wsZiel.Range("$A$1:$Z$500000")
strDateiname = strDateiname = InputBox("Bitte den Namen der CSV-Datei angeben.", "CSV-Export") ' _
Der Name der Datei soll vom Nutzer immer vorgegeben werden können
strDateiort = "C:\Users\GIS\Desktop\Exceltool_Ergebnis\CSV-Dateien\"                           ' _
Der Speicherort der Datei soll nicht veränderbar sein
'* Vorgehensweise von Rainer (Forum)
Dim Export As Worksheet
Dim ExportString, Timestamp
Dim i, ExportRow As Integer
Dim LC, LR As Long
Set Export = ThisWorkbook.Sheets("Zieltabelle")
'Make the Exportfile
ExportFile = strDateiort & "\Excel_Export_" & Timestamp & ".csv"
LR = Export.Cells(Export.Rows.Count, "A").End(xlUp).Row
'Write the first headerline
LC = Export.Cells(1, Export.Columns.Count).End(xlToLeft).Column
For i = 1 To LC
If ExportString  "" Then
ExportString = ExportString & "," & Export.Cells(1, i)
Else
ExportString = Export.Cells(1, i)
End If
Next i
Open ExportFile For Output As #1        'The first use of the file must use "OUTPUT"
Print #1, ExportString
Close #1
ExportString = ""
'Write the data
For ExportRow = 2 To LR
For i = 1 To LC
If ExportString  "" Then
ExportString = ExportString & "," & Export.Cells(ExportRow, i)
Else
ExportString = Export.Cells(ExportRow, i)
End If
Next i
Open ExportFile For Append As #1        'The second (and further) use of the file must use " _
_
APPEND"
Print #1, ExportString
Close #1
Next ExportRow
End sub

Hier ist der Link zur hochgeladenen Datei: https://www.herber.de/bbs/user/119646.xlsm
Vielen Dank für Deine Hilfe!
VG, Anka
Anzeige
AW: Ausgewählte Arbeitsmappe als CSV-Datei speichern
08.02.2018 15:48:35
Rainer
Hallo Anka,
Ich schaue es mir morgen mal an.
Gruß,
Rainer
AW: Ausgewählte Arbeitsmappe als CSV-Datei speichern
13.02.2018 07:03:08
Rainer
Hallo Anka,
ich lag ein paar Tage im Bett, sorry für die Verspätung.
https://www.herber.de/bbs/user/119746.xlsm
Dafür hat es nun 2 Varianten. Probier mal welche bei 400.000 Zeilen schneller ist.
Gruß,
Rainer
Anzeige
AW: Ausgewählte Arbeitsmappe als CSV-Datei speichern
14.02.2018 20:35:48
Anka
Hallo Rainer,
du bist echt spitze! Vielen Dank für Deine Hilfe, du hast mich gerettet! Dein erster Vorschlag funktioniert bei irgendwie nicht, da kommt bei "SaveCopyAs" immer ein Kompilierungsfehler mit "Die Methode oder das Datenelement wurde nicht gefunden". Hier der Code dazu:
Sub Datei_speichern()
'* Definition meiner Variablen
Dim wsAuswahl As Worksheet
Dim wsZiel As Worksheet
Dim rng_Zieltabelle As Range
'Dim str_alterName As String
'Dim neuerName As String
Dim Workbook As Workbook                        'Braucht es das? Du benutzt es nie in dieser  _
Sub
Dim strDateiname As String
Dim strDateiort As String
Set Workbook = ThisWorkbook                       'Braucht es das?
'Set wsAuswahl = Worksheets("Auswahlmaske")                                     'temporär
Set wsZiel = Worksheets("Zieltabelle")
'Set rng_Zieltabelle = wsZiel.Range("$A$1:$Z$500000")                           'Das brauchen  _
wir nicht, wir zählen später die Zeilen und Spalten (LR und LC)
strDateiname = InputBox("Bitte den Namen der CSV-Datei angeben.", "CSV-Export") 'Der Name der  _
Datei soll vom Nutzer immer vorgegeben werden können
strDateiort = ThisWorkbook.Path & "\"                                           'temporär
'strDateiort = "C:\Users\GIS\Desktop\Exceltool_Ergebnis\CSV-Dateien\"           'Der  _
Speicherort der Datei soll nicht veränderbar sein
'* Vorgehensweise von Rainer (Forum)
Dim Export As Worksheet
Dim ExportString, Trennzeichen
Dim i As Integer, ExportRow As Integer
Dim LC As Long, LR As Long
Set Export = ThisWorkbook.Sheets("Zieltabelle")
'Trennzeichen für csv Spaltentrennung auswählen
Trennzeichen = ","
'Make the Exportfile
ExportFile = strDateiort & strDateiname & ".csv"    'Die Datei soll an den vordefinierten  _
Ort mit dem zuvor eingegebenen Namen gespeichert werden
LR = Export.Cells(Export.Rows.Count, "A").End(xlUp).Row
'Ermittle Letzte Zeile in EXPORT, Spalte A
'Erste Zeile exportieren
LC = Export.Cells(1, Export.Columns.Count).End(xlToLeft).Column
'Ermittle Letzte Spalte in EXPORT, Zeile 1
For i = 1 To LC
'Schleife über alle Spalten
If ExportString  "" Then
'Der ExportString wird Zellenweise befüllt. Die erste Spalte soll kein Trennzeichen  _
haben.
ExportString = ExportString & Trennzeichen & Export.Cells(1, i)
Else
'Das ist die erste Spalte
ExportString = Export.Cells(1, i)
End If
Next i
Open ExportFile For Output As #1
'Beim ersten Schreiben in die Exportdatei muss die Option "OUTPUT" benutzt werden.
Print #1, ExportString
Close #1
'Schließe Exportdatei wieder
ExportString = ""
'Leere den Exportstring, damit eine neue Zeile beginnen kann ohne Trennzeichen
'Weitere Zeilen exportieren
For ExportRow = 2 To LR
'Schleife für Zeile 2 bis Letzte Zeile
For i = 1 To LC
'Schleife über alle Spalten, wie beim erstem Mal
If ExportString  "" Then
ExportString = ExportString & Trennzeichen & Export.Cells(ExportRow, i)
Else
ExportString = Export.Cells(ExportRow, i)
End If
Next i
Open ExportFile For Append As #1
'Ab dem zweiten Schreiben in die Exportdatei muss die Option "OUTPUT" benutzt werden.
Print #1, ExportString
Close #1
'Schließe Exportdatei wieder
ExportString = ""
'Leere den Exportstring, damit eine neue Zeile beginnen kann ohne Trennzeichen
Next ExportRow
End Sub
Modul 1 funktioniert. Ich habe da noch eine Frage: Wie kann ich den Speicherort verändern? Du hast es mit folgendem Code gemacht:
strDateiort = ThisWorkbook.Path & "\"
Ich habe es jetzt so funktioniert:
strDateiort = "C:\Users\GIS\Desktop\Exceltool_Ergebnis\CSV-Dateien\
Aber das hat leider nicht funktioniert. Warum?
Vielen Dank nochmal Rainer!
VG, Anka
Anzeige
AW: Ausgewählte Arbeitsmappe als CSV-Datei speichern
15.02.2018 06:10:47
Rainer
Hallo Anka,
ich habe es wohl nicht final gespeichert vor dem Hochladen.
wsZiel.SaveCopyAs strDateiort & "DeleteMe.xlsm"

ist Unfug, weil versucht wird ein Blatt als Mappe zu speichern.
Es muss heißen:
ThisWorkbook.SaveCopyAs strDateiort & "DeleteMe.xlsm"
Wegen dem Speicherort, da kann ich nur vermuten dass du nicht als Nutzer "GIS" angemeldet bist oder der angegebene Ordner nicht existiert.
Hier deine neue Datei: https://www.herber.de/bbs/user/119817.xlsm
Modul 1a ist der alte Modul 1 komplett unverändert.
Modul 1b ist der alte Modul 1, aber mit einem Dialog "Speichern als". Wenn dann dein ausgewählter Speicherort (Variable strDateiort) nicht geht, dann bekommst du eine Meldung vom System und kannst einen anderen Ort definieren.
Modul 2a ist ähnlich dem alten Modul 2, ich habe aber den Ablauf der lokalen Kopie etwas verändert. So bleibt jetzt die Originaldatei geöffnet nach dem Speichern und nicht die CSV.
Modul 2b ist genau wie 2a, nur mit dem Dialog "Speichern als" wie in Modul 1b.
Probiere bitte nochmal.
Gruß,
Rainer
Anzeige
AW: Ausgewählte Arbeitsmappe als CSV-Datei speichern
15.02.2018 11:32:28
Anka
Hallo Rainer,
jetzt klappt alles! Vielen Vielen Dank!
Bu bist echt spitze!!!!
Liebe Grüße,
Anka
;

Forumthreads zu verwandten Themen

Anzeige
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

Ausgewählte Arbeitsmappe als CSV-Datei speichern


Schritt-für-Schritt-Anleitung

Um ein Excel-Arbeitsblatt als CSV-Datei zu speichern, kannst Du den folgenden VBA-Code verwenden. Dieser Code ermöglicht es, eine spezifische Arbeitsmappe zu exportieren, während die ursprüngliche Excel-Datei unverändert bleibt.

  1. Öffne dein Excel-Dokument und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu: Rechtsklicke auf „VBAProject (Dein Dokument)“ > Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:
Sub Datei_speichern()
    Dim wsZiel As Worksheet
    Dim strDateiname As String
    Dim strDateiort As String
    Dim ExportFile As String
    Dim ExportString As String
    Dim i As Integer, ExportRow As Integer
    Dim LC As Long, LR As Long

    Set wsZiel = ThisWorkbook.Worksheets("Zieltabelle")
    strDateiname = InputBox("Bitte den Namen der CSV-Datei angeben.", "CSV-Export")
    If strDateiname = "" Then
        MsgBox "Dateiname ist ungültig!"
        Exit Sub
    End If

    strDateiort = "C:\Users\GIS\Desktop\Exceltool_Ergebnis\CSV-Dateien\" ' Speicherort fix
    ExportFile = strDateiort & strDateiname & ".csv"

    LR = wsZiel.Cells(wsZiel.Rows.Count, "A").End(xlUp).Row
    LC = wsZiel.Cells(1, wsZiel.Columns.Count).End(xlToLeft).Column

    Open ExportFile For Output As #1
    For i = 1 To LC
        If ExportString <> "" Then
            ExportString = ExportString & "," & wsZiel.Cells(1, i)
        Else
            ExportString = wsZiel.Cells(1, i)
        End If
    Next i
    Print #1, ExportString
    ExportString = ""

    For ExportRow = 2 To LR
        For i = 1 To LC
            If ExportString <> "" Then
                ExportString = ExportString & "," & wsZiel.Cells(ExportRow, i)
            Else
                ExportString = wsZiel.Cells(ExportRow, i)
            End If
        Next i
        Print #1, ExportString
        ExportString = ""
    Next ExportRow
    Close #1

    MsgBox "Datei wurde als CSV-Datei gespeichert!", vbOK
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Füge einen Button hinzu, um das Makro auszuführen: Entwicklertools > Einfügen > Button (Formularsteuerelement) > Zeichne einen Button und wähle das Makro Datei_speichern aus.

Häufige Fehler und Lösungen

  • Problem: „Die Methode oder das Datenelement wurde nicht gefunden.“

    • Lösung: Überprüfe, ob die Arbeitsblätter „Zieltabelle“ und „Auswahlmaske“ korrekt benannt sind.
  • Problem: Die gesamte Excel-Datei wird als CSV gespeichert.

    • Lösung: Stelle sicher, dass der Code nur auf das gewünschte Arbeitsblatt zugreift, indem Du die richtige Variable für wsZiel verwendest.
  • Problem: CSV-Datei wird nicht im gewünschten Ordner gespeichert.

    • Lösung: Überprüfe, ob der angegebene Ordner existiert und Du die richtigen Zugriffsrechte hast.

Alternative Methoden

  • Excel als CSV speichern: Du kannst auch die integrierte Funktion nutzen, um ein Arbeitsblatt manuell als CSV zu speichern. Wähle dazu das Arbeitsblatt aus, gehe zu „Datei“ > „Speichern unter“ und wähle „CSV (Comma delimited)“ als Dateiformat.

  • Power Query verwenden: Eine weitere Möglichkeit, um große Datenmengen als CSV zu exportieren, ist die Verwendung von Power Query, das eine benutzerfreundliche Oberfläche bietet.


Praktische Beispiele

  1. Beispiel zur Umwandlung einer Excel-Tabelle in CSV: Wenn Du eine Excel-Tabelle mit verschiedenen Datensätzen hast, kannst Du den oben genannten Code anpassen, um nur spezifische Zeilen oder Spalten zu exportieren.

  2. Export einer gefilterten Tabelle: Wenn Du nur gefilterte Daten exportieren möchtest, kannst Du das „AutoFilter“-Feature verwenden, um nur die sichtbaren Zellen in die CSV-Datei zu schreiben.


Tipps für Profis

  • Dynamische Bereichsdefinition: Anstatt einen festen Bereich zu definieren, kannst Du den Bereich dynamisch bestimmen, um sicherzustellen, dass auch bei variierenden Datensätzen alles erfasst wird.

  • CSV-Trennzeichen anpassen: Wenn Du ein anderes Trennzeichen als ein Komma benötigst (z.B. Semikolon), passe die ExportString-Variablen im Code an.

  • Fehlermeldungen optimieren: Implementiere detaillierte Fehlermeldungen, um den Benutzern bei Problemen besser helfen zu können.


FAQ: Häufige Fragen

1. Wie kann ich eine Excel-Datei als CSV speichern? Du kannst dies direkt über „Datei“ > „Speichern unter“ tun und das Format „CSV“ auswählen.

2. Ist es möglich, mehrere Blätter gleichzeitig als CSV zu exportieren? Mit VBA ist das möglich, indem Du eine Schleife über die gewünschten Arbeitsblätter erstellst und jedes Blatt separat als CSV speicherst.

3. Welche Excel-Versionen unterstützen den CSV-Export? Alle modernen Excel-Versionen (ab Excel 2007) unterstützen das Speichern als CSV-Datei.

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