1.2k Aufrufe
Gefragt in Tabellenkalkulation von
Hallo,

ich habe eine Excel-Vorlage mit 2 Tabellenblättern erstellt. Das 2. Tabellenblatt heißt "Linear" und soll als CSV Datei abgespeichert werden. Die Ursprungsdatei soll aber Excel bleiben und das Tabellenblatt in Excel soll auch nicht umbenannt werden.

Ich habe dieses Makro eingesetzt, aber irgendwie funktioniert das nicht. Hat jemand eine Idee?

For d = 1 To 2

Select Case d
Case Is = 2
strBlatt = "Linear"
End Select

'Ausgabepfad und Dateinamen für Ausgabedatei erstellen
Ausgabedatei = Ausgabepfad & strBlatt & "_" & Date & "_" & Worksheets("minbestaende") & ".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 3
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

'Bildschirmaktualisierung
Application.ScreenUpdating = True

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

6 Antworten

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

erst einmal fehlt der Pfad, in den die Datei exportiert werden soll. Ohne die Pfadangabe funktioniert das Makro natürlich nicht.

Dann hast du folgende Zeile:
Ausgabedatei = Ausgabepfad & strBlatt & "_" & Date & "_" & Worksheets("minbestaende") & ".csv"

Ich nehme mal an, du willst aus dem Tabellenblatt "minbestaende" noch den Inhalt einer Zelle einfügen. Die Zelle fehlt hier aber.
Die Select-Schleife ist überflüssig.

Versuch es mal so:

Sub csv_export()

Dim strBlatt As String
Dim Ausgabepfad As String
Dim Ausgabedatei As String
Dim lngSpalte As Long
Dim lngLetzte As Long
Dim Z As Long
Dim Zeile As String
Dim Vollzeile As String

'Variblen festlegen
strBlatt = "Linear" 'Name des zu exportierenden Arbeitsblattes
Ausgabepfad = "C:\Test\" 'Pfad, in der die Datei exportiert werden soll - anpassen!!!

'Ausgabepfad und Dateinamen für Ausgabedatei erstellen
Ausgabedatei = Ausgabepfad & strBlatt & "_" & Date & "_" & Worksheets("minbestaende").Range("A1") & ".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
'Nur die Spalten A bis C werden exportiert
For lngSpalte = 1 To 3
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

'Bildschirmaktualisierung
Application.ScreenUpdating = True

'Abschlussmeldung
MsgBox "CSV Linear übertragen", 64

End Sub


Den Pfad musst du natürlich auf deine Verhältnisse anpassen und auch ggf. die Zelle aus der Tabelle "minbestaende".

Gruß

M.O.
0 Punkte
Beantwortet von
guten morgen,

ich habe dein makro hinterlegt, aber er bleibt an dieser position stehen:
Ausgabedatei = Ausgabepfad & strBlatt & "_" & Date & "_" & Worksheets("minbestaende").Range("A1") & ".csv"

Den Inhalt einer Zelle möchte ich im Dateinamen nicht auslesen. Muss ich dann das .Range ("A1") entfernen?

Was mach' ich denn falsch?
0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo,

du hast in deinem Ursprungscode die Zeile
Ausgabedatei = Ausgabepfad & strBlatt & "_" & Date & "_" & Worksheets("minbestaende") & ".csv"
drin.

Den Inhalt einer Zelle möchte ich im Dateinamen nicht auslesen.

Das war ja in deinem ersten Thread anders.

Wenn du keine Angabe eines Inhaltes aus einer Zelle in dem Dateinamen willst, dann ändere die Zeile für den Dateipfad in
Ausgabedatei = Ausgabepfad & strBlatt & "_" & Date & ".csv"

Gruß

M.O.
0 Punkte
Beantwortet von
ach sooo...ja, das hat geklappt. Toll :-).

Jetzt hakt der Code an dieser Stelle:
Vollzeile = Left(Vollzeile, Len(Vollzeile) - 1) 'Letztes Semicolon abschneiden
0 Punkte
Beantwortet von m-o Profi (22.9k Punkte)
Hallo,

den Fehler kann ich zwar nicht nachvollziehen, dabei ist mir aber aufgefallen, dass im Code das Trennzeichen nicht festgelegt ist.

Probier mal den folgenden Code aus:

Sub csv_export()

Dim strBlatt As String
Dim Ausgabepfad As String
Dim Ausgabedatei As String
Dim lngSpalte As Long
Dim lngLetzte As Long
Dim Z As Long
Dim Zeile As String
Dim Vollzeile As String
Dim Trennzeichen As String

'Variblen festlegen
strBlatt = "Linear" 'Name des zu exportierenden Arbeitsblattes
Ausgabepfad = "C:\Test\" 'Pfad, in der die Datei exportiert werden soll - anpassen!!!
Trennzeichen = ";"

'Ausgabepfad und Dateinamen für Ausgabedatei erstellen
Ausgabedatei = Ausgabepfad & strBlatt & "_" & Date & ".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
'Nur die Spalten A bis C werden exportiert
For lngSpalte = 1 To 3
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

'Bildschirmaktualisierung
Application.ScreenUpdating = True

'Abschlussmeldung
MsgBox "CSV Linear übertragen", 64

End Sub


Gruß

M.O.
0 Punkte
Beantwortet von
Großartig! Klappt jetzt wie verrückt. Ich danke Dir.

Colatrinkerin
...