AW: TXT File Export
19.05.2022 22:17:57
Yal
Hallo Jay,
Anbei mein Versuch.
Ist zwischen die erste und letzte Zeile in A:C eine Zeile leer, wird sie nicht exportiert. Sollltest Du diese leere Zeile trotzdem exportieren wollen, so füge den 4te Parameter im Aufruf von Daten_exportieren auf "True", also
Daten_exportieren ws, "A:C", cPfad & Worksheets("Tabelle1").Range("A1").Value & "_" & Zaehler & ".txt", True
Für ein bessere Lesbarkeit habe ich Anweisungen, die sich wiederholen (LetzteZeile) oder thematisch trennbar sind (Daten_exportieren), als separate Procedure abgelagert.
Zwar habe ich es getestet, es empflieht sich jedoch zuerst statt "Case Else" einen Case mit nur wenigen Blätter zu probieren.
Ich verwende in Daten_exportieren die Bibliothek "Microsoft Scripting Runtime" (Für Objekt FileSystemObject und TextStream). Diese muss in deinem VBA-Editor unter Extras, Verweise... angebunden werden.
Public Sub Blätter_speichern_txt()
Dim ws As Worksheet
Dim Zaehler As Long
Const cPfad = "C:\Home\Documents\Neuer Ordner\" 'wichtig: abschliessenden "\"
Application.ScreenUpdating = False
Zaehler = 1
For Each ws In ThisWorkbook.Worksheets
Select Case ws.Name
Case "Tabelle1", "Tabelle5" 'ausgenommene Blätter
Case Else
If LetzteZeile(ws, "A:C") Then 'nur wenn nicht leer
Daten_exportieren ws, "A:C", cPfad & Worksheets("Tabelle1").Range("A1").Value & "_" & Zaehler & ".txt"
Zaehler = Zaehler + 1
End If
End Select
Next
Application.ScreenUpdating = True
MsgBox ("Es wurden " & Zaehler - 1 & " txt-Datei(en) erstellt!")
End Sub
Private Sub Daten_exportieren(ByRef Blatt As Worksheet, Bereich As String, DateiName As String, Optional ExportLeereZeile = False)
'Unter Anbindung (Extras, Verweise...) von 'Microsoft Scripting Runtime'
Dim FSO As New FileSystemObject
Dim Datei As TextStream
Dim R
Dim Inhalt As String
Const cTrenn = ";"
Set Datei = FSO.CreateTextFile(DateiName)
For Each R In Blatt.Range(Bereich).Rows("1:" & LetzteZeile(Blatt, Bereich)).Rows
Inhalt = Join(Application.Transpose(Application.Transpose(R)), cTrenn)
If ExportLeereZeile Or Inhalt String(R.Cells.Count - 1, cTrenn) Then Datei.WriteLine Inhalt
Next
Datei.Close
End Sub
Private Function LetzteZeile(ByRef Blatt As Worksheet, Spalten As String) As Long
Dim Sp
Dim Letzte
For Each Sp In Blatt.Range(Spalten).EntireColumn.Rows(Rows.Count).Cells
Set Letzte = Sp.End(xlUp)
If Letzte.Value "" And Letzte.Row > LetzteZeile Then LetzteZeile = Letzte.Row
Next
End Function
VG
Yal