1.6k Aufrufe
Gefragt in Tabellenkalkulation von
Ich möchte eine CSV-Datei speichern, die bei der Speicherung neben dem vorgegebenen Namen auch das Datum und den Zellinhalt A2 des Tabellenblattes "Aktionsplanung" verwendet.
Die Ursprungsdatei soll aber Excel bleiben.


Folgendes Makro verwende ich derzeit:

Sub CSV_Sicherung()
Dim Ausgabepfad As String
Dim Ausgabedatei As String
Dim lngLetzte As Long
Dim lngSpalte As Long
Dim Zeile As String
Dim VollZeile As String
Dim Trennzeichen As String
Dim arrTabellen
Dim arrSpalten
Dim i As Long
Dim z As Long

'Bildschirmaktualisierung ausschalten
Application.ScreenUpdating = False

'Ausgabepfad wird festgelegt
Ausgabepfad = "G:\Einkauf\Werbung\Aktionsplanung CSV"

'Trennzeichen wird festgelegt
Trennzeichen = ";"

'Namen der Tabellenblätter die als CSV-ausgegeben werden
arrTabellen = Array("Aktionsplanung")

'letzte Spalte, die in den einzelnen Blättern ausgegeben werden soll, ab Spalte A = 1
arrSpalten = Array(19)

'Schleife zum Durchlauf
For i = 0 To 2

'Ausgabepfad und Dateinamen für Ausgabedatei erstellen
Ausgabedatei = Ausgabepfad & arrTabellen(i) & ".csv"

'letzte Zeile des jeweiligen Tabellenblatts ermitteln
lngLetzte = Worksheets(arrTabellen(i)).Cells(Rows.Count, 1).End(xlUp).Row

'Falls Ausgabedatei bereits besteht, wird diese gelöscht
If Dir(Ausgabedatei) <> "" Then Kill (Ausgabedatei)

'Datei Öffen zur Ausgabe
Open Ausgabedatei For Output As #1


For z = 1 To lngLetzte

For lngSpalte = 1 To arrSpalten(i)
Zeile = Trim(Worksheets(arrTabellen(i)).Cells(z, lngSpalte).Text)
Zeile = Replace(Zeile, Trennzeichen, "") 'ggf in Text vorkommendes Trennzeichen wird gelöscht
VollZeile = VollZeile & Zeile & Trennzeichen
Next lngSpalte

'Ausgabe in Datei
VollZeile = Left(VollZeile, Len(VollZeile) - 1) 'Letzten Semicolon abschneiden
Print #1, VollZeile
VollZeile = ""

Next z

Close #1 'Datei schliessen

Next i

'Bildschirmaktualiserung
Application.ScreenUpdating = True

'Abschlussmeldung
MsgBox "Sicherung CSV übertragen", 64
End Sub

8 Antworten

0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo,

meinst du das etwa so:

Sub CSV_Sicherung()
Dim Ausgabepfad As String
Dim Ausgabedatei As String
Dim lngLetzte As Long
Dim lngSpalte As Long
Dim Zeile As String
Dim VollZeile As String
Dim Trennzeichen As String
Dim i As Long
Dim z As Long

'Bildschirmaktualisierung ausschalten
Application.ScreenUpdating = False

'Ausgabepfad wird festgelegt
Ausgabepfad = "G:\Einkauf\Werbung\Aktionsplanung CSV\"

'Trennzeichen wird festgelegt
Trennzeichen = ";"

'Ausgabepfad und Dateinamen für Ausgabedatei erstellen
Ausgabedatei = Ausgabepfad & "Aktionsplanung_" & Date & "_" & Worksheets("Aktionsplanung").Range("A2") & ".csv"

'letzte Zeile des jeweiligen Tabellenblatts ermitteln
lngLetzte = Worksheets("Aktionsplanung").Cells(Rows.Count, 1).End(xlUp).Row

'Falls Ausgabedatei bereits besteht, wird diese gelöscht
If Dir(Ausgabedatei) <> "" Then Kill (Ausgabedatei)

'Datei Öffen zur Ausgabe
Open Ausgabedatei For Output As #1

For z = 1 To lngLetzte

For lngSpalte = 1 To 19
Zeile = Trim(Worksheets("Aktionsplanung").Cells(z, lngSpalte).Text)
Zeile = Replace(Zeile, Trennzeichen, "") 'ggf in Text vorkommendes Trennzeichen wird gelöscht
VollZeile = VollZeile & Zeile & Trennzeichen
Next lngSpalte

'Ausgabe in Datei
VollZeile = Left(VollZeile, Len(VollZeile) - 1) 'Letzten Semicolon abschneiden
Print #1, VollZeile
VollZeile = ""

Next z

Close #1 'Datei schliessen

'Bildschirmaktualiserung
Application.ScreenUpdating = True

'Abschlussmeldung
MsgBox "Sicherung CSV übertragen", 64
End Sub


Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.,

super! Es ist genau so, wie ich es mir vorgestellt habe.

...wir suchen noch einen excel*Z* in unserem Büro. Interesse? ;-)

Frohe Weihnachten
0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo,

vielen Dank für die Rückmeldung. Wenn ich mal eine Veränderung brauche, werde ich auf dein Angebot zurück kommen ;-).

Viele Grüße und frohe Weihnachten

M.O.
0 Punkte
Beantwortet von
Hallo,

ich habe jetzt mehrere .xls-Tabellenblätter, die als csv-Datei mit Inhalt einer Zelle gespeichert werden sollen.
Mein Code funktioniert leider nicht. Was muß ich ändern?

Sub CSV_Sicherung()
'
Dim Ausgabepfad As String
Dim Ausgabedatei As String
Dim lngLetzte As Long
Dim lngSpalte As Long
Dim Zeile As String
Dim VollZeile As String
Dim Trennzeichen As String
Dim i As Long
Dim z As Long

'Bildschirmaktualisierung ausschalten
Application.ScreenUpdating = False

'Ausgabepfad wird festgelegt
Ausgabepfad = "G:\Einkauf\Werbung\Aktionsplanung CSV\"

'Trennzeichen wird festgelegt
Trennzeichen = ";"

'Ausgabepfad und Dateinamen für Ausgabedatei erstellen
Ausgabedatei = Ausgabepfad & "Aktionsplanung_Vol" & Date & "_" & Worksheets("Aktionsplanung").Range("A2") & ".csv"
Ausgabedatei = Ausgabepfad & "Aktionsplanung_Fam" & Date & "_" & Worksheets("Aktionsplanung").Range("A2") & ".csv"
Ausgabedatei = Ausgabepfad & "Aktionsplanung_67" & Date & "_" & Worksheets("Aktionsplanung").Range("A2") & ".csv"

'letzte Zeile des jeweiligen Tabellenblatts ermitteln
lngLetzte = Worksheets("Aktionsplanung").Cells(Rows.Count, 1).End(xlUp).Row

'Falls Ausgabedatei bereits besteht, wird diese gelöscht
If Dir(Ausgabedatei) <> "" Then Kill (Ausgabedatei)

'Datei Öffen zur Ausgabe
Open Ausgabedatei For Output As #1

For z = 1 To lngLetzte

For lngSpalte = 1 To 19
Zeile = Trim(Worksheets("Aktionsplanung").Cells(z, lngSpalte).Text)
Zeile = Replace(Zeile, Trennzeichen, "") 'ggf in Text vorkommendes Trennzeichen wird gelöscht
VollZeile = VollZeile & Zeile & Trennzeichen
Next lngSpalte

'Ausgabe in Datei
VollZeile = Left(VollZeile, Len(VollZeile) - 1) 'Letzten Semicolon abschneiden
Print #1, VollZeile
VollZeile = ""

Next z

Close #1 'Datei schliessen

'Bildschirmaktualiserung
Application.ScreenUpdating = True

'Abschlussmeldung
MsgBox "Sicherung CSV übertragen", 64

End Sub
0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo,

wenn du der Variable Ausgabedatei drei verschiedene Namen zuweist, dann wird nur der letzte Name genutzt (wie du sicherlich festgestellt hast). Und außerdem wird immer das aktive Blatt exportiert.
Um dein Makro anzupassen müsste man wissen, welche Tabellenblätter du als CSV-Datei exportieren willst. Und im Namen soll auch immer der Wert aus Zelle A2 des Tabellenblatts "Aktionsplanung" übernommen werden?

Gruß

M.O.
0 Punkte
Beantwortet von
Hallo M.O.,

ich möchte 3 Tabellenblätter ("Aktionsplanung_Vol" und "Aktionsplanung_Fam" und "Aktionsplanung_67") als CSV-Datei abspeichern. Jede der 3 CSV-Dateien soll hinter dem Tabellennamen den Zusatz aus Zelle A2 des Tabellenblatts "Aktionsplanung_Vol" und das heutige Datum erhalten.

Beispiel:
Aktionsplanung_Vol_Zelleninhalt A2_Datum

Die Ursprungs-Exceltabelle soll aber Excel bleiben.

Gruß,
colatrinker
0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo,

hier das geänderte Makro:

Sub CSV_Sicherung()
Dim Ausgabepfad As String
Dim Ausgabedatei As String
Dim lngLetzte As Long
Dim lngSpalte As Long
Dim Zeile As String
Dim VollZeile As String
Dim Trennzeichen As String
Dim i As Long
Dim z As Long
Dim d As Long
Dim strBlatt As String

'Bildschirmaktualisierung ausschalten
Application.ScreenUpdating = False

'Ausgabepfad wird festgelegt
Ausgabepfad = "G:\Einkauf\Werbung\Aktionsplanung CSV\"

'Trennzeichen wird festgelegt
Trennzeichen = ";"

For d = 1 To 3

Select Case d
Case Is = 1
strBlatt = "Aktionsplanung_Vol"
Case Is = 2
strBlatt = "Aktionsplanung_Fam"
Case Is = 3
strBlatt = "Aktionsplanung_67"
End Select

'Ausgabepfad und Dateinamen für Ausgabedatei erstellen
Ausgabedatei = Ausgabepfad & strBlatt & "_" & Date & "_" & Worksheets("Aktionsplanung_Vol").Range("A2") & ".csv"

'letzte Zeile des jeweiligen Tabellenblatts ermitteln
lngLetzte = Worksheets(strBlatt).Cells(Rows.Count, 1).End(xlUp).Row

'Falls Ausgabedatei bereits besteht, wird diese gelöscht
If Dir(Ausgabedatei) <> "" Then Kill (Ausgabedatei)

'Datei Öffen zur Ausgabe
Open Ausgabedatei For Output As #1

For z = 1 To lngLetzte

For lngSpalte = 1 To 19
Zeile = Trim(Worksheets(strBlatt).Cells(z, lngSpalte).Text)
Zeile = Replace(Zeile, Trennzeichen, "") 'ggf in Text vorkommendes Trennzeichen wird gelöscht
VollZeile = VollZeile & Zeile & Trennzeichen
Next lngSpalte

'Ausgabe in Datei
VollZeile = Left(VollZeile, Len(VollZeile) - 1) 'Letztes Semicolon abschneiden
Print #1, VollZeile
VollZeile = ""

Next z

Close #1 'Datei schliessen

Next d

'Bildschirmaktualiserung
Application.ScreenUpdating = True

'Abschlussmeldung
MsgBox "Sicherung CSV übertragen", 64
End Sub


Gruß

M.O.
0 Punkte
Beantwortet von
fantastisch.... vielen lieben Dank
...