Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Dateinamen als Tabellenblattnamen einlesen

Forumthread: Dateinamen als Tabellenblattnamen einlesen

Dateinamen als Tabellenblattnamen einlesen
17.01.2017 17:00:16
Lisa
Hallihallo,
ich habe schon wieder ein Frage (so langsam komme ich mir fast schon blöd vor...). Aber hier habe ich bisher immer so tolle Hilfe bekommen, von daher versuche ich es einfach weiterhin.
Ich nutze den unten stehenden Code, um alle .txt Dateien aus einem Ordner hintereinander in meine Arbeitsmappe einzulesen. Dabei bleibt das Blatt namens "Berechnung" am Beginn stehen. Das Problem besteht darin, dass die Tabellenblätter aus irgendeinem Grund nicht den Namen der Dateien bekommen, sondern "Tabelle x" heißen. Der Name wäre aber für die weitere Verwendung der Daten wichtig.
Wo stehe ich auf dem Schlauch?
Sub C_Dateien_laden()
Dim strPfad As String, strFileName As String
Dim FSO As Object
Dim file As Object
Dim lngLR As Long
'Lösche alle Worksheets bevor die neuen geladen werden
Application.DisplayAlerts = False
For Each wks In ActiveWorkbook.Sheets
    If Worksheets.Count > 1 And wks.Name  "Berechnung" Then
    wks.Delete
    ElseIf Worksheets.Count = 1 Then
    Exit Sub
    End If
Next wks
Application.DisplayAlerts = True
'Anpassen
strPfad = "K:\Neue Instruktionen_Win\"
Set FSO = CreateObject("scripting.filesystemobject")
For Each file In FSO.getfolder(strPfad).Files
        strFileName = file.Name
        Sheets.Add.Move after:=Sheets(Sheets.Count)
        With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & strPfad & strFileName,  _
Destination:=Range("A1"))
        .Name = "strFileName"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = xlMSDOS
        .TextFileStartRow = 1
        .TextFileParseType = xlDelimited
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
Next
End Sub

Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dateinamen als Tabellenblattnamen einlesen
17.01.2017 17:15:35
Anton
Hallo Lisa,
probier's mal so:
Sub C_Dateien_laden()
Dim strPfad As String, strFileName As String
Dim FSO As Object
Dim file As Object
Dim lngLR As Long
'Lösche alle Worksheets bevor die neuen geladen werden
Application.DisplayAlerts = False
For Each wks In ActiveWorkbook.Sheets
If Worksheets.Count > 1 And wks.Name  "Berechnung" Then
wks.Delete
ElseIf Worksheets.Count = 1 Then
Exit Sub
End If
Next wks
Application.DisplayAlerts = True
'Anpassen
strPfad = "K:\Neue Instruktionen_Win\"
Set FSO = CreateObject("scripting.filesystemobject")
For Each file In FSO.getfolder(strPfad).Files
strFileName = file.Name
Sheets.Add.Move after:=Sheets(Sheets.Count)
With ActiveSheet
        .QueryTables.Add(Connection:="TEXT;" & strPfad & strFileName,  _
Destination:=Range("A1"))
.Name = strFileName
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = xlMSDOS
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Next
End Sub
VG Anton
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Dateinamen als Tabellenblattnamen einlesen


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul: Rechtsklick auf "VBAProject (DeineArbeitsmappe)" > Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:
Sub C_Dateien_laden()
    Dim strPfad As String, strFileName As String
    Dim FSO As Object
    Dim file As Object

    ' Lösche alle Worksheets bevor die neuen geladen werden
    Application.DisplayAlerts = False
    For Each wks In ActiveWorkbook.Sheets
        If Worksheets.Count > 1 And wks.Name <> "Berechnung" Then
            wks.Delete
        ElseIf Worksheets.Count = 1 Then
            Exit Sub
        End If
    Next wks
    Application.DisplayAlerts = True

    ' Anpassen
    strPfad = "K:\Neue Instruktionen_Win\"
    Set FSO = CreateObject("scripting.filesystemobject")
    For Each file In FSO.getfolder(strPfad).Files
        strFileName = file.Name
        Sheets.Add.Move after:=Sheets(Sheets.Count)
        With ActiveSheet
            .QueryTables.Add(Connection:="TEXT;" & strPfad & strFileName, Destination:=Range("A1"))
            .Name = strFileName  ' Hier wird der Excel Dateiname verwendet
            .FieldNames = True
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .RefreshStyle = xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = True
            .RefreshPeriod = 0
            .TextFilePromptOnRefresh = False
            .TextFilePlatform = xlMSDOS
            .TextFileStartRow = 1
            .TextFileParseType = xlDelimited
            .TextFileTextQualifier = xlTextQualifierDoubleQuote
            .TextFileConsecutiveDelimiter = False
            .TextFileTabDelimiter = True
            .TextFileSemicolonDelimiter = False
            .TextFileCommaDelimiter = False
            .TextFileSpaceDelimiter = False
            .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1)
            .TextFileTrailingMinusNumbers = True
            .Refresh BackgroundQuery:=False
        End With
    Next
End Sub
  1. Ändere den strPfad zu dem Ordner, in dem deine .txt-Dateien gespeichert sind.
  2. Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.

Häufige Fehler und Lösungen

  • Fehler: Tabellenblätter heißen "Tabelle1", "Tabelle2"

    • Lösung: Stelle sicher, dass die Zeile .Name = strFileName im Code korrekt gesetzt ist. Der Excel Dateiname sollte hier zugewiesen werden.
  • Fehler: "Pfad nicht gefunden"

    • Lösung: Überprüfe den angegebenen strPfad. Achte darauf, dass der Pfad korrekt ist und die .txt-Dateien vorhanden sind.

Alternative Methoden

Eine alternative Methode, um Dateinamen als Tabellenblattnamen zu verwenden, ist die Nutzung von Power Query:

  1. Gehe zu Daten > Daten abrufen > Aus Datei > Aus Ordner.
  2. Wähle den Ordner mit den .txt-Dateien aus.
  3. Lade die Daten in Excel, indem du den Dateinamen als Spalte hinzufügst und die Abfrage anpasst.

Praktische Beispiele

  • Beispiel 1: Wenn du .csv-Dateien anstatt .txt-Dateien einlesen möchtest, ändere den Dateityp in der Abfrage:

    .QueryTables.Add(Connection:="TEXT;" & strPfad & strFileName, Destination:=Range("A1"))
  • Beispiel 2: Um eine Excel Datei mit dem Namen "Daten.xlsx" zu laden, verwende:

    strPfad = "C:\MeinOrdner\"
    strFileName = "Daten.xlsx"

Tipps für Profis

  • Nutze die Möglichkeit, mehrere Dateiformate gleichzeitig zu verarbeiten, indem du den Code anpasst, um verschiedene Dateiendungen zu berücksichtigen.
  • Verwende Fehlerbehandlungsroutinen, um sicherzustellen, dass der Code nicht bei einem Fehler abbricht, sondern stattdessen eine benutzerfreundliche Fehlermeldung anzeigt.

FAQ: Häufige Fragen

1. Kann ich auch andere Dateiformate einlesen? Ja, du kannst auch .csv oder .xlsx Dateien einlesen. Passe die Verbindungszeichenfolge im Code entsprechend an.

2. Wie kann ich die Arbeitsmappe speichern, nachdem ich die Daten geladen habe? Füge am Ende des Makros die Zeile ActiveWorkbook.Save hinzu, um die Arbeitsmappe automatisch zu speichern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige