ich tüftle aktuell an einem VBA-Skript, welches automatisiert Textdateien in Excel importiert, über diese dann eine Kopfzeile setzt und sie anschließend als xlsx-Datei in einem fest definierten Ordner abspeichert.
Soweit so gut, die Basis steht bereits und das Importieren der txt-Files funktioniert problemlos und genauso wie es gedacht ist.
Leider hänge ich aktuell am automatischen Abspeichern sowie dem Einfügen der Kopfzeile. Somit wende ich mich nun hilfesuchend an die Experten in diesem Forum :-)
Bisher sieht mein Code wie folgt aus:
Option Explicit
Sub TXT_Einlesen()
'Variablen deklarieren
Dim CurrentFileName As String, InputFolder As String
'Ausschalten der Bildschirmaktualisierung
Application.ScreenUpdating = False
'Angabe des Input-Verzeichnisses
InputFolder = ActiveWorkbook.Path & "\Input\"
'Überprüfung, ob das letzte Zeichen des Strings ein Backslash ist
If Right(InputFolder, 1) "\" Then
InputFolder = InputFolder & "\"
End If
'Einlesen aller im Input-Verzeichnis vorhandenen TXT-Files
CurrentFileName = Dir(InputFolder & "*.txt")
'Einlese-Schleife
Do While CurrentFileName ""
Call TextImportStart(InputFolder, CurrentFileName)
CurrentFileName = Dir()
Loop
'Einschalten der Bildschirmaktualisierung
Application.ScreenUpdating = True
End Sub
Sub TextImportStart(InputFolder As String, CurrentFileName As String)
'Variablen deklarieren
Dim OutputFolder As String
Dim wbk As Workbook
'Angabe des Output-Ordners
OutputFolder = ActiveWorkbook.Path
'Überprüfung, ob das letzte Zeichen des Strings ein Backslash ist
If Right(OutputFolder, 1) "\" Then
OutputFolder = OutputFolder & "\"
End If
'Ausschalten der Bildschirmaktualisierung
Application.ScreenUpdating = False
'Einlesen der Datei, Trennzeichen = |
Workbooks.OpenText Filename:=InputFolder & CurrentFileName, Tab:=False, Space:=False, Comma:= _
False, Semicolon:=False, Other:=True, OtherChar:="|"
'Systemmeldungen deaktivieren
Application.DisplayAlerts = False
'Mappen speichern - KLAPPT NOCH NICHT!!!
'wbk.SaveAs Filename:=OutputFolder & CurrentFileName & ".xls"
'Systemmeldungen einschalten
Application.DisplayAlerts = True
'Schließen der Dateien
For Each wkb In Workbooks
If Not wkb.Name = Application.ThisWorkbook.Name Then wkb.Close True
Next
'Einschalten der Bildschirmaktualisierung
Application.ScreenUpdating = True
End Sub
Nun meine Fragen: Was muss ich anpassen, damit ein automatisches Speichern der Dateien funktioniert? Bisher wird nur die erste Datei gespeichert, daraufhin bricht das Skript ab und meldet, dass eine Datei mit dem gleichen Namen bereits vorhanden wäre. Ich vermute also, dass das Skript alle Dateien unter dem gleichen Namen speichern will, eigentlich hätte ich aber gerne, dass es jede Datei unter dem jeweiligen Namen der Arbeitsmappe, welcher ja von der Importdatei mit eingelesen wird, abspeichert.
Beispiel: Datei 1 heißt 1.txt und wird unter eben diesem Namen eingelesen. Das Skript sollte die Datei dann als 1.xlsx speichern. Gleiches mit den Folgedateien.
Ein weiterer Haken wäre eine automatische Platzierung einer festen Kopfzeile in jede der eingelesenen Dateien.
Beispiel: Datei 1.txt wird eingelesen, der Import der Informationen aus der txt sollte bei Zeile 2 beginnen und in Zeile 1 sollte immer die feste Kopfzeile eingefügt werden (A1 = "Spalte1", B1 = "Spalte2", C1= "Spalte3", D1 = "Spalte4", E1 = "Spalte5"). Dies sind aktuell nur Platzhalternamen, welche ich aber später entsprechend anpassen würde. Meine Versuche scheiterten daran, dass die Kopfzeile immer nur in der ersten Datei eingefügt wurde, danach war leider Schluss. Ich vermute ich muss das ebenfalls irgendwie in eine Schleife einbauen?!
Leider bin ich nicht der größte VBA-Profi, lerne aber gerne stetig dazu. Ohne Hilfe von Profis stehe ich aber leider gerade auf dem Schlauch :-(
Ich hoffe mir kann jemand weiterhelfen. Ich danke schon einmal vorab!
Viele Grüße,
MFZB159