Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA aus Tabellenblätter csv Datei erstellen
#1
Hallo,

auf der Suche nach einer Möglichkeit aus einem Tabellenblatt eine csv Datei zu erzeugen, ohne das diese sich öffnet bin ich auf den folgenden Code gestoßen:


Code:
Sub BestelldateialsCSVspeichern()

Dim Dateiname As String

Dateiname = InputBox("Dateiname (ohne Erweiterung)")
If Dateiname = "" Then Exit Sub

Workbooks.Add xlWBATWorksheet
ThisWorkbook.Sheets("Tabelle1").UsedRange.Copy
ActiveSheet.Cells(1, 1).PasteSpecial xlPasteValues
ActiveWorkbook.SaveAs "Dein\Pfad\" & Dateiname, xlCSV, local:=True
ActiveWorkbook.Close False

End Sub

Diesen möchte ich gerne abwandeln und bin leider maßlos überfordert.


Im ersten Schritt möchte ich, dass automatisch für alle Tabellenblätter eine CSV Datei erstellt werden soll, außer für die ersten drei. Dafür habe ich folgende If Schleife, die ich bereits an anderer Stelle nutze hervorgeholt:



Code:
Sub LöschenBestellblätter()

Dim wks As Worksheet
Application.DisplayAlerts = False
For Each wks In ThisWorkbook.Sheets
If LCase(wks.Name) <> "tabelle1" And _
   LCase(wks.Name) <> "bestand" And _
   LCase(wks.Name) <> "ek" Then
Next
Application.DisplayAlerts = True


End Sub

Dann soll der Dateiname nicht über eine Msg.Box abgefragt werden, sondern den Tabellennamen erhalten.
Natürlich ist die Anzahl an Tabellenblätter nicht immer gleich, sodass auch hier fortlaufend eine Überprüfung stattfinden muss.
Zur Erläuterung möchte ich ein Beispiel anführen.
Ich habe immer Tabelle 1, Bestand und EK daraus erzeuge ich mit einem anderen Makro 3 weitere Tabellenblätter. Für die drei weiteren Tabellenblätter soll eine CSV Datei erzeugt werden. 
Es sind allerdings nicht immer nur drei Tabellenblätter, die vorher erzeugt werden.
Es könnten auch nur 1 oder sogar 10 sein.
Sicherlich könnte der User in Zukunft auch jedes Tabellenblatt einzeln speichern, aber es wäre definitiv schöner, wenn eine automatische Erzeugung und Speicherung irgendwie zu realisieren wäre.

Über Ratschläge würde ich mich sehr freuen.

Viele Grüße
Antworten Top
#2
Hallo,

das ist eigentlich ganz einfach:

Code:
Sub AlsCSVspeichern()
Dim Dateiname As String
 Dateiname = ActiveSheet.Name
 ThisWorkbook.Sheets(Dateiname).Copy
 ActiveWorkbook.SaveAs ThisWorkbook.Path + "\" & Dateiname, xlCSV, local:=True
 ActiveWorkbook.Close False
End Sub

Sub AllesExportieren()
Dim wks As Worksheet

 For Each wks In ThisWorkbook.Sheets
 If LCase(wks.Name) <> "tabelle1" And _
    LCase(wks.Name) <> "bestand" And _
    LCase(wks.Name) <> "ek" Then wks.Select: AlsCSVspeichern
 Next
End Sub
vg, MM
Antworten Top
#3
Hallo,
vielen Dank für die Antwort.

Bei mir funktioniert der Code leider nicht. Es öffnet sich erstens immer eine neue Mappe und leider nur das Tabellenblatt, welches gerade angewählt ist.
Allerdings soll sich keins öffnen und alle anderen abgespeichert werden außer tabelle 1, bestand und ek.
Zudem entspricht der Name der sich öffnenden Datei nicht dem eigentlichen Tabellenblattnamen.
Tut mir wirklich leid, aber meine Kenntnisse sind absolute Grundkenntnisse.
Antworten Top
#4
Hallo,

so vielleicht (Speichern als CSV und löschen in einem):
Sub LoeschenBestellblaetter()
 Dim wks As Worksheet
 Application.ScreenUpdating = False
 For Each wks In ThisWorkbook.Sheets
   If LCase(wks.Name) <> "tabelle1" And _
     LCase(wks.Name) <> "bestand" And _
     LCase(wks.Name) <> "ek" Then
     wks.Move
     ActiveWorkbook.SaveAs "Dein\Pfad\" & ActiveSheet.Name, xlCSV, Local:=True
     ActiveWorkbook.Close False
   End If
 Next wks
 Application.ScreenUpdating = True
End Sub
Sollen die Blätter nicht gelöscht werden, ersetze
wks.Move
durch
wks.Copy
Gruß Uwe
[-] Folgende(r) 1 Nutzer sagt Danke an Kuwer für diesen Beitrag:
  • deschroe
Antworten Top
#5
Hallo,

danke sehr. Es funktioniert super!
Antworten Top
#6
Hallo,

eigentlich funktioniert das schon so wie von dir gewünscht, allerdings muss man dazu die Schreibmarke vor dem Ausführen des Makros auf die Zeile "AllesExportieren" setzen. Das hast du scheinbar nicht gemacht. Das die Excel-Datei, die sich kurz öffnet, einen Standardnamen hat ist unerheblich, denn sie wird ja verworfen, sobald die CSV- Datei mit dem richtigen (Blatt-)Namen erstellt wurde.

vg, MM
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste