Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Dateien in Ordner umbenennen (Zellinhalt

Dateien in Ordner umbenennen (Zellinhalt
23.11.2021 11:08:53
Lukas
Hallo zusammen,
ich habe gesucht aber nichts passendes gefunden:
Ich habe einen Ordner mit vielen Unterordnern. In denen befinden sich txt- und xlsx-Dateien. Alle xlsx-Dateien in diesen Unterordnern sollen umbenannt werden. Und zwar soll an den bestehenden Dateinamen der Inhalt der Zelle BB1 angehängt werden (und davor noch ein Unterstrich).
Also so:
abc.xlsx
abc_(Zellinhalt aus BB1).xlsx
Könnt ihr mir helfen?
Liebe Grüße
Lukas
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dateien in Ordner umbenennen (Zellinhalt
23.11.2021 13:18:23
MCO
Hallo Lukas!
Probier das mal:

Sub umbenennen()
Dim Fso As Object
Dim SearchFolder As Object
Dim FI As Object
Dim EachFil As Object
Set Fso = CreateObject("Scripting.Filesystemobject")
Stop
Ordner = "C:\Hier mussDeinOrdnerpfadrein"
Set SearchFolder = Fso.GetFolder(Ordner)
Set EachFil = SearchFolder.Files            ' Dateien in der jeweiligen Root
On Error Resume Next
For Each FI In EachFil                      ' Schleife über alle Dateien
If InStr(Right(FI.Name, 4), "xlsx") > 0 Then
neuname = Replace(FI.Name, ".xlsx", "")
pfad_neu = Ordner & "\" & neuname & "_" & Range("BB1") & ".xlsx"
Name FI As pfad_neu 'Verschieben = umbenennen!
End If
Next FI
Set EachFil = Nothing
Set Fso = Nothing
End Sub
Gruß, MCO
Anzeige
AW: Dateien in Ordner umbenennen (Zellinhalt
23.11.2021 15:34:24
Lukas
Vielen Dank MCO für deine Hilfe.
Das sieht schon ganz vielversprechen aus. Aber es wird bisher bloß ein Unterstrich angehängt und nicht der Inhalt von BB1.
Woher weiß das Skript, dass es BB1 aus der jeweiligen, umzubenennenden Datei nehmen soll und nicht aus der, in der das Makro steht?
Liebe Grüße
Lukas
Anzeige
AW: Dateien in Ordner umbenennen (Zellinhalt
23.11.2021 16:12:43
volti
Hallo zusammen,
habe mir mal erlaubt MCOs Code ein wenig zu erweitern, so dass der Inhalt aus der Zelle BB1 der jeweiligen geschlossenen Datei geholt wird.
Allerdings setzt dies voraus, dass auch der Blattname bekannt ist. Hierzu hat Lukas keine Aussage gemacht.
Wenn der gewünschte Blattname unbekannt ist bleibt m.E. nur das Öffnen der Datei im Hintergrund....
Code:

[Cc][+][-]

Sub umbenennen() Dim Fso As Object Dim SearchFolder As Object Dim FI As Object Dim EachFil As Object Dim sBB1 As String Set Fso = CreateObject("Scripting.Filesystemobject") Stop Ordner = "C:&bsol;Hier mussDeinOrdnerpfadrein" Set SearchFolder = Fso.GetFolder(Ordner) Set EachFil = SearchFolder.Files ' Dateien in der jeweiligen Root On Error Resume Next For Each FI In EachFil ' Schleife über alle Dateien If InStr(Right(FI.Name, 4), "xlsx") > 0 Then neuname = Replace(FI.Name, ".xlsx", "") sBB1 = GetValue(Ordner & "&bsol;", FI.Name, "Tabelle1", "BB1") pfad_neu = Ordner & "&bsol;" & neuname & "_" & sBB1 & ".xlsx" Name FI As pfad_neu ' Verschieben = umbenennen! End If Next FI Set EachFil = Nothing Set Fso = Nothing End Sub Private Function GetValue(ByVal sPath As String, ByVal sFile As String, _ ByVal sSheet As String, ByVal sTarget As String) As Variant ' Einen Wert aus einer Datei holen On Error GoTo ErrorHandler If Right$(sPath, 1) <> "&bsol;" Then sPath = sPath & "&bsol;" GetValue = ExecuteExcel4Macro("'" & sPath & "[" & sFile & "]" & sSheet & "'!" _ & Range(sTarget).Range("A1").Address(, , xlR1C1)) Exit Function ErrorHandler: GetValue = CVErr(xlErrRef) End Function

viele Grüße
Karl-Heinz

Anzeige
AW: Dateien in Ordner umbenennen (Zellinhalt
23.11.2021 16:42:43
Lukas
Auch dir, Karl-Heinz, vielen Dank!
... wir kommen der Sache näher. Das Skript funktioniert wunderbar wenn ich einen Pfad angebe in dem direkt die Excel-Dateien sind (=Unterordner).
Wenn ich allerdings einen übergeordneten Ordner angebe, geschieht in den Unterordnern nichts.
Liebe Grüße
Lukas
Anzeige
AW: Dateien in Ordner umbenennen (Zellinhalt
23.11.2021 17:02:42
Lukas
Btw:
Der Blattname ist bekannt und lautet immer "Sheet1"
AW: Dateien in Ordner umbenennen (Zellinhalt
23.11.2021 17:49:20
volti
Hallo Lukas,
die Prozedur von MCO durchsuchte nur einen Ordner.
Hier eine Variante, die auch Unterordner mit einbezieht.
Es gäbe noch weitere Varianten der Dateiermittlung und diese kann man sicher auch weiter straffen, ich habe aber auf bei mir vorhandenen Mustercode aufgesetzt.
Probiere es einfach mal aus...
Code:

[Cc][+][-]

Option Explicit Dim gsFilter As String, gbUnterordner As Boolean Dim i As Long Sub Umbenennen() ' Auflisten von gefilterten Dateien aus Ordner und Unterordner Dim iAnz As Long, sArr() As String, sPath As String, vBB1 As Variant ' Parameter, bei Bedarf <<< anpassen >>> sPath = "C:&bsol;Hier mussDeinOrdnerpfadrein" ' Pfad gsFilter = "*.xlsx" ' Dateifilter gbUnterordner = True ' Mit Unterordner FileOut_FSO iAnz, sArr, CreateObject("scripting.filesystemobject").GetFolder(sPath) If iAnz > 0 Then ' Verarbeitung des Ergebnisses For i = 1 To iAnz - 1 vBB1 = GetValue(sArr(0, i) & "&bsol;", sArr(1, i), "Sheet1", "BB1") sPath = sArr(0, i) & "&bsol;" & sArr(1, i) On Error Resume Next Name sPath As Replace(sPath, ".xlsx", "_" & vBB1 & ".xlsx") ' Verschieben = umbenennen! Next i Else ' Keine Datei entsprechend des Suchbegriffes gefunden MsgBox "Es wurden keine Dateien gefunden!", vbCritical, "Umbenennen" End If End Sub Sub FileOut_FSO(i As Long, sArr, oPath As Object) Dim oFile As Object, oDir As Object, Obj As Variant On Error Resume Next For Each oFile In oPath.Files ' Ordner durchsuchen If Err = 0 Then With oFile Err = 0 If .Name Like gsFilter Or gsFilter = "" Then ReDim Preserve sArr(1, i) DoEvents sArr(0, i) = Replace(.Path, "&bsol;" & .Name, "") sArr(1, i) = .Name ' Dateiname ins Array aufnehmen i = i + 1 End If End With End If Next If gbUnterordner Then For Each oDir In oPath.Subfolders ' Unterordner durchsuchen Obj = FileDateTime(oDir) FileOut_FSO i, sArr, oDir Next End If End Sub Private Function GetValue(ByVal sPath As String, ByVal sFile As String, _ ByVal sSheet As String, ByVal sTarget As String) As Variant ' Einen Wert aus einer Datei holen On Error GoTo ErrorHandler If Right$(sPath, 1) <> "&bsol;" Then sPath = sPath & "&bsol;" GetValue = ExecuteExcel4Macro("'" & sPath & "[" & sFile & "]" & sSheet & "'!" _ & Range(sTarget).Range("A1").Address(, , xlR1C1)) Exit Function ErrorHandler: GetValue = CVErr(xlErrRef) End Function

viele Grüße
Karl-Heinz

Anzeige
AW: Dateien in Ordner umbenennen (Zellinhalt
23.11.2021 17:55:04
volti
Und
Obj = FileDateTime(oDir)
kannst Du noch rausnehmen. Eine Codeleiche :-)
Gruß
KH
AW: Dateien in Ordner umbenennen (Zellinhalt
24.11.2021 09:39:58
Lukas
Danke!
Auch hier funktioniert es nur wenn ich den Pfad angebe in dem die Dateien liegen. Unterordner funktionieren nicht.
Außerdem wird immer die erste Datei im Ordner nicht umbenannt?!
Anzeige
AW: Dateien in Ordner umbenennen (Zellinhalt
24.11.2021 11:20:21
volti
Hallo Lkas,
hier noch mal ein Update u.a. auch mit etwas Fehlerabfang.
Hier kannst Du mal im Debug-Bereich prüfen, welche Dateien gefunden werden, welche einen Fehler produzieren und welche umbenannt werden.
Bei mir klappt es, aber ich habe ja auch nicht Deine Gegebenheiten...
Code:

[Cc][+][-]

Option Explicit Dim gbUnterordner As Boolean, i As Long Sub Umbenennen() ' Auflisten von gefilterten Dateien aus Ordner und Unterordner Dim iAnz As Long, sArr() As String, sPath As String, vBB1 As Variant sPath = "C:&bsol;Hier mussDeinOrdnerpfadrein" ' Pfad <<< anpassen >>> gbUnterordner = True ' Mit Unterordner FileOut_FSO iAnz, sArr, CreateObject("scripting.filesystemobject").GetFolder(sPath) If iAnz > 0 Then ' Verarbeitung des Ergebnisses For i = 1 To iAnz vBB1 = GetValue(sArr(0, i) & "&bsol;", sArr(1, i), "Sheet1", "BB1") If IsError(vBB1) Then Debug.Print "In der Datei " & sArr(1, i) & " ist kein Blatt Sheet1 vorhanden!" Else sPath = sArr(0, i) & "&bsol;" & sArr(1, i) Debug.Print "Name " & sPath & " AS " & Replace(sPath, ".xlsx", "_" & vBB1 & ".xlsx") ' Name sPath As Replace(sPath, ".xlsx", "_" & vBB1 & ".xlsx")' Verschieben = umbenennen! End If Next i Else ' Keine Datei entsprechend des Suchbegriffes gefunden MsgBox "Es wurden keine Dateien gefunden!", vbCritical, "Umbenennen" End If End Sub Sub FileOut_FSO(i As Long, sArr, oPath As Object) Dim oFile As Object, oDir As Object On Error Resume Next For Each oFile In oPath.Files ' Ordner durchsuchen If Err = 0 Then With oFile Err = 0 If .Name Like "*.xlsx" Then i = i + 1 ReDim Preserve sArr(1, i) DoEvents sArr(0, i) = Replace(.Path, "&bsol;" & .Name, "") sArr(1, i) = .Name ' Dateiname ins Array aufnehmen End If End With End If Next If gbUnterordner Then For Each oDir In oPath.Subfolders ' Unterordner durchsuchen FileOut_FSO i, sArr, oDir Next End If End Sub Private Function GetValue(ByVal sPath As String, ByVal sFile As String, _ ByVal sSheet As String, ByVal sTarget As String) As Variant ' Einen Wert aus einer Datei holen On Error GoTo ErrorHandler If Right$(sPath, 1) <> "&bsol;" Then sPath = sPath & "&bsol;" GetValue = ExecuteExcel4Macro("'" & sPath & "[" & sFile & "]" & sSheet & "'!" _ & Range(sTarget).Range("A1").Address(, , xlR1C1)) Exit Function ErrorHandler: GetValue = CVErr(xlErrRef) End Function

viele Grüße
Karl-Heinz

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Dateien in Ordner umbenennen mit Excel-VBA


Schritt-für-Schritt-Anleitung

Um alle Dateien in einem Ordner umzubenennen, insbesondere wenn Du den Inhalt einer bestimmten Zelle in den Dateinamen einfügen möchtest, kannst Du folgendes VBA-Skript verwenden. Achte darauf, den Pfad zu Deinem Ordner entsprechend anzupassen:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Klicke auf Einfügen und wähle Modul, um ein neues Modul zu erstellen.
  3. Kopiere und füge den folgenden Code in das Modul ein:
Sub Umbenennen()
    Dim Fso As Object
    Dim SearchFolder As Object
    Dim FI As Object
    Dim EachFil As Object
    Dim sBB1 As String
    Dim Ordner As String

    Set Fso = CreateObject("Scripting.Filesystemobject")
    Ordner = "C:\Hier mussDeinOrdnerpfadrein" ' Pfad anpassen
    Set SearchFolder = Fso.GetFolder(Ordner)
    Set EachFil = SearchFolder.Files

    On Error Resume Next
    For Each FI In EachFil
        If InStr(Right(FI.Name, 4), "xlsx") > 0 Then
            sBB1 = GetValue(Ordner & "\", FI.Name, "Sheet1", "BB1")
            Name FI As Replace(FI.Path, ".xlsx", "_" & sBB1 & ".xlsx"
        End If
    Next FI

    Set EachFil = Nothing
    Set Fso = Nothing
End Sub

Private Function GetValue(ByVal sPath As String, ByVal sFile As String, ByVal sSheet As String, ByVal sTarget As String) As Variant
    On Error GoTo ErrorHandler
    GetValue = ExecuteExcel4Macro("'" & sPath & "[" & sFile & "]" & sSheet & "'!" & Range(sTarget).Range("A1").Address(, , xlR1C1))
    Exit Function

ErrorHandler:
    GetValue = CVErr(xlErrRef)
End Function
  1. Schließe den VBA-Editor und führe das Makro über Entwicklertools > Makros aus.

Häufige Fehler und Lösungen

  • Fehler: Unterordner werden nicht durchsucht
    Die oben genannte Prozedur sucht nur im angegebenen Ordner. Um auch Unterordner zu durchsuchen, musst Du den Code anpassen, um rekursive Suchfunktionen zu implementieren.

  • Fehler: Zellinhalt wird nicht korrekt übernommen
    Stelle sicher, dass der Blattname (in diesem Fall "Sheet1") korrekt angegeben ist und dass sich die Zelle BB1 in der betreffenden Datei befindet.


Alternative Methoden

Eine andere Möglichkeit, Dateien mit Excel umzubenennen, ist die Verwendung von Power Query. Diese Methode ist jedoch weniger flexibel, da sie keine direkten Dateisystemoperationen unterstützt. Du kannst Daten aus dem Ordner importieren und dann mit den integrierten Funktionen von Excel arbeiten, um die Namen manuell zu ändern.


Praktische Beispiele

  • Beispiel 1:
    Du hast mehrere Excel-Dateien im Ordner "C:\MeineDateien" und möchtest den Inhalt von Zelle BB1 in den Dateinamen einfügen. Stelle sicher, dass Du den Pfad im Skript anpasst und das Makro ausführst.

  • Beispiel 2:
    Wenn Du die Namen von vielen Dateien in einem bestimmten Format umbenennen möchtest (z.B. "abc" in "abc_neuerName"), kannst Du die Replace-Funktion anpassen.


Tipps für Profis

  • Debugging: Nutze die Debug.Print-Anweisung, um den Status und die Variablen während der Ausführung des Makros zu überwachen.
  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen, um Probleme beim Ausführen des Skripts zu identifizieren und zu beheben.
  • Batch-Verarbeitung: Verwende Schleifen und sammel die Dateinamen in einem Array, um die Verarbeitung effizienter zu gestalten.

FAQ: Häufige Fragen

1. Wie kann ich alle Dateien in einem Ordner umbenennen?
Du kannst das obenstehende VBA-Skript verwenden, um alle Excel-Dateien in einem Ordner oder Unterordner nach einem bestimmten Muster umzubenennen.

2. Was muss ich tun, wenn das Makro nicht funktioniert?
Überprüfe den angegebenen Ordnerpfad und stelle sicher, dass die Zelle BB1 in den jeweiligen Excel-Dateien vorhanden ist.

3. Ist es möglich, Dateien aus Ordnern zu holen, die nicht im selben Verzeichnis sind?
Ja, Du kannst den Pfad im Skript ändern, um auf einen anderen Ordner zuzugreifen, aber Du musst sicherstellen, dass die Dateien im richtigen Format vorliegen.

4. Kann ich das Skript für andere Dateiformate anpassen?
Ja, Du kannst die Bedingungen im Skript anpassen, um auch andere Formate wie .txt oder .csv zu berücksichtigen.

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