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

Forumthread: Ordner, Unterordner, Dateien finden und umbenennen

Ordner, Unterordner, Dateien finden und umbenennen
15.09.2018 08:58:36
Andy

Hallo Zusammen,
ich bin auf der Suche nach einer Lösung für folgende Aufgabenstellung.
- ein variabler Ordner (Ordner in der die Excel-Datei liegt)
- mit einer unbekannten Anzahl von Unterverzeichnisebenen und
- einer unbekannten Anzahl von Unterordnern und
- einer unbekannten Anzahl von darin befindlichen Dateien
- sollen nach folgender Vorschrift umbenannt werden:
o in jedem Ordnernamen, Unterordnernamen und Dateiennamen befindet sich ein zu suchender String → Variable: searchstrg
o diese String soll durch ein anderen ersetzt werden → Variable: replacestrg
o der Such- und Ersetzstring sollen variablel belegt werden können.
Gibt es für diese Anforderung schon eine adäquate Lösung.
Vielen Dank im vorab.
Viele Grüße
Andreas
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ordner, Unterordner, Dateien finden und umbenennen
15.09.2018 09:55:54
Sepp
Hallo Andreas,
der Windows-Explorer muss geschlossen sein.
Modul Modul2
Option Explicit 
 
Sub test() 
  Const cstrInitalPath As String = "D:\Forum\Test" 
  Const cstrSearch As String = "abc" 
  Const cstrReplace As String = "xyz" 
   
  Call renameFilesAndFolders(cstrInitalPath, cstrSearch, cstrReplace) 
End Sub 
 
Sub renameFilesAndFolders(StartFolder As String, sSearch As String, sReplace As String) 
  Dim objFSO As Object, objFolder As Object, objSFolder As Object, objFile As Object 
  Dim strNewName As String 
 
  Set objFSO = CreateObject("Scripting.FileSystemObject") 
  Set objFolder = objFSO.GetFolder(StartFolder) 
 
  For Each objSFolder In objFolder.SubFolders 
    For Each objFile In objSFolder.Files 
      If objFile.Name Like "*" & sSearch & "*" Then 
        strNewName = objFile.ParentFolder.Path & "\" & Replace(objFile.Name, sSearch, sReplace) 
        objFSO.MoveFile objFile.Path, strNewName 
      End If 
    Next 
    If objSFolder.Name Like "*" & sSearch & "*" Then 
      strNewName = objSFolder.ParentFolder.Path & "\" & Replace(objSFolder.Name, sSearch, sReplace) 
      objFSO.MoveFolder objSFolder.Path, strNewName 
    Else 
      strNewName = objSFolder.Path 
    End If 
    Call renameFilesAndFolders(strNewName, sSearch, sReplace) 
  Next 
End Sub 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: Ordner, Unterordner, Dateien finden und umbenennen
15.09.2018 10:49:53
Andy
Hallo Sepp
vielen Dank.
Es funktioniert einwandfrei.
Grüße
Andreas
AW: Ordner, Unterordner, Dateien finden und umbenennen
18.09.2018 21:46:28
Ete
Hallo Sepp
ich habe den Code oben genutzt und die Ordnerstruktur die umbenannt werden soll über einen Dialog ausgewählt. Dadurch wird allerdings der ausgewählte Ordner sollte er den String enthalten nicht mit umbenannt. Des weiteren erfolgt ebenfalls keine Umbenennung der Dateien in der ersten oberen Ebene!

Option Explicit
Sub renaming()
On Error GoTo Errorhandler1
Dim cstrInitalPath As String
Dim cstrSearch As String
Dim cstrReplace As String
Dim strNewNameMain As String
Dim objMFSO As Object, objMFolder As Object
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = False
.Title = "Bitte Ordner wählen"
.InitialFileName = ThisWorkbook.Path
.InitialView = msoFileDialogViewThumbnail
.ButtonName = "select"
If .Show = -1 Then
cstrInitalPath = .SelectedItems(1)
Else: Exit Sub
End If
End With
cstrSearch = frmCOMNO.ldnmb.Value
cstrReplace = frmCOMNO.nwnb.Value
Call renameFilesAndFolders(cstrInitalPath, cstrSearch, cstrReplace)
'Codeschnipsel für den ersten ausgewälten Ordner.
If cstrInitalPath Like "*" & cstrSearch & "*" Then
strNewNameMain = Replace(cstrInitalPath, cstrSearch, cstrReplace)
'MsgBox strNewNameMain
Set objMFSO = CreateObject("Scripting.FileSystemObject")
Set objMFolder = objMFSO.GetFolder(cstrInitalPath)
objMFSO.MoveFolder objMFolder.Path, strNewNameMain
End If
MsgBox "Renaming finalized"
Exit Sub
Errorhandler1:
MsgBox "Error: Please contact SF2T Support."
End Sub
'____________________________________________________
Sub renameFilesAndFolders(StartFolder As String, sSearch As String, sReplace As String)
Dim objFSO As Object, objFolder As Object, objSFolder As Object, objFile As Object
Dim strNewName As String
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(StartFolder)
For Each objSFolder In objFolder.SubFolders
For Each objFile In objSFolder.Files
If objFile.Name Like "*" & sSearch & "*" Then
strNewName = objFile.ParentFolder.Path & "\" & Replace(objFile.Name, sSearch, sReplace)
objFSO.MoveFile objFile.Path, strNewName
End If
Next
If objSFolder.Name Like "*" & sSearch & "*" Then
strNewName = objSFolder.ParentFolder.Path & "\" & Replace(objSFolder.Name, sSearch,  _
sReplace)
objFSO.MoveFolder objSFolder.Path, strNewName
Else
strNewName = objSFolder.Path
End If
Call renameFilesAndFolders(strNewName, sSearch, sReplace)
Next
End Sub

Anzeige
AW: Ordner, Unterordner, Dateien finden und umbenennen
19.09.2018 22:07:09
Sepp
Hallo Ete,
quick'n dirty.
Modul Modul1
Option Explicit 
  
Sub renaming() 
  Dim strInitalPath As String, strSearch As String, strReplace As String 
  Dim objMFSO As Object, objMFolder As Object 
   
  On Error GoTo Errorhandler1 
 
  With Application.FileDialog(msoFileDialogFolderPicker) 
    .AllowMultiSelect = False 
    .Title = "Bitte Ordner wählen" 
    .InitialFileName = ThisWorkbook.Path 
    .InitialView = msoFileDialogViewThumbnail 
    .ButtonName = "select" 
    If .Show = -1 Then 
      strInitalPath = .SelectedItems(1) 
    End If 
  End With 
 
  If Len(strInitalPath) Then 
    strSearch = "abc" 'frmCOMNO.ldnmb.Value 
    strReplace = "xyz" 'frmCOMNO.nwnb.Value 
 
    Set objMFSO = CreateObject("Scripting.FileSystemObject") 
    Set objMFolder = objMFSO.GetFolder(strInitalPath) 
 
    If Not objMFolder.ParentFolder Is Nothing Then 
      strInitalPath = objMFolder.ParentFolder.Path 
    End If 
 
    Call renameFilesAndFolders(strInitalPath, strSearch, strReplace) 
 
    MsgBox "Renaming finalized" 
  End If 
 
Errorhandler1: 
 
  If Err.Number <> 0 Then MsgBox "Error: Please contact SF2T Support." 
 
  Set objMFSO = Nothing 
  Set objMFolder = Nothing 
End Sub 
 
Sub renameFilesAndFolders(StartFolder As String, sSearch As String, sReplace As String) 
  
  Dim objFSO As Object, objFolder As Object, objSFolder As Object, objFile As Object 
  Dim strNewName As String 
  
  Set objFSO = CreateObject("Scripting.FileSystemObject") 
  Set objFolder = objFSO.GetFolder(StartFolder) 
  
  For Each objSFolder In objFolder.SubFolders 
    For Each objFile In objSFolder.Files 
      If objFile.Name Like "*" & sSearch & "*" Then 
        strNewName = objFile.ParentFolder.Path & "\" & Replace(objFile.Name, sSearch, sReplace) 
        objFSO.MoveFile objFile.Path, strNewName 
      End If 
    Next 
    If objSFolder.Name Like "*" & sSearch & "*" Then 
      strNewName = objSFolder.ParentFolder.Path & "\" & Replace(objSFolder.Name, sSearch, _
        sReplace) 
      objFSO.MoveFolder objSFolder.Path, strNewName 
    Else 
      strNewName = objSFolder.Path 
    End If 
    Call renameFilesAndFolders(strNewName, sSearch, sReplace) 
  Next 
 
End Sub 
 
 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: Ordner, Unterordner, Dateien finden und umbenennen
20.09.2018 07:57:29
Ete
Hallo Sepp,
läuft!! Vielen Dank.
Allerdings quick ist es jetzt nicht mehr.
Durch die zusätzliche Abfrage läuft die Prozedur bis zum Call stark verlangsamt.
Allerdings immer noch besser als 100 Ordner und Dateien von Hand umzubenennen.
Danke für die Hilfe.
AW: Ordner, Unterordner, Dateien finden und umbenennen
20.09.2018 12:24:38
Ete
Hallo Sepp läuft leider doch nicht wie gewünscht.
Also nochmal zu aktuellen Problem bis gestern:
Main Folder ("Test renamer")
-Sub Folder (COMNO)
--Sub Sub Folder (Sub COMNO)
---Sub Sub Sub File (COMNO-2.*)
--Sub Sub File (COMNO-1.*)
-Sub Folder (COMNO-1)
-Sub Folder (COMNO-2)
-Sub File (COMNO.*)
Habe da auch in den Anhang etwas gepackt.
Nun soll wenn ich über mein Auswahlfenster alle Substrukturen inklusive des Auswahlordners umbenannt werden soweit diese den Suchstring enthalten.
Lösung von Vorgestern war, dass in der ersten Subebene die Dokumente nicht umbenannt wurden.
Jetzt benennt er alles in der Ebene wie die Auswahl mit.?
Kannst du da nochmal draufschauen bitte.
Dank dir oder jemand anderen in der VBA community.
Hier die Datei dazu
https://www.herber.de/bbs/user/124103.zip
Anzeige
AW: Ordner, Unterordner, Dateien finden und umbenennen
20.09.2018 18:59:34
Sepp
Hallo Ete,
nur quick!
Modul Modul1
Option Explicit 
 
Sub renaming() 
  Dim strInitalPath As String, strSearch As String, strReplace As String 
   
  On Error GoTo Errorhandler1 
  
  With Application.FileDialog(msoFileDialogFolderPicker) 
    .AllowMultiSelect = False 
    .Title = "Bitte Ordner wählen" 
    .InitialFileName = ThisWorkbook.Path 
    .InitialView = msoFileDialogViewThumbnail 
    .ButtonName = "select" 
    If .Show = -1 Then 
      strInitalPath = .SelectedItems(1) 
    End If 
  End With 
  
  If Len(strInitalPath) Then 
    strSearch = frmCOMNO.ldnmb.Value 
    strReplace = frmCOMNO.nwnb.Value 
    Call renameFilesAndFolders(strInitalPath, strSearch, strReplace) 
    MsgBox "Renaming finalized" 
  End If 
  
Errorhandler1: 
  
  If Err.Number <> 0 Then MsgBox "Error: Please contact SF2T Support." 
  
End Sub 
  
Sub renameFilesAndFolders(StartFolder As String, sSearch As String, sReplace As String) 
  Dim objFSO As Object, objFolder As Object, objSFolder As Object, objFile As Object 
  Dim strNewName As String 
   
  Set objFSO = CreateObject("Scripting.FileSystemObject") 
  Set objFolder = objFSO.GetFolder(StartFolder) 
   
  For Each objSFolder In objFolder.SubFolders 
    For Each objFile In objSFolder.Files 
      If objFile.Name Like "*" & sSearch & "*" Then 
        strNewName = objFile.ParentFolder.Path & "\" & Replace(objFile.Name, sSearch, sReplace) 
        objFSO.MoveFile objFile.Path, strNewName 
      End If 
    Next 
    If objSFolder.Name Like "*" & sSearch & "*" Then 
      strNewName = objSFolder.ParentFolder.Path & "\" & Replace(objSFolder.Name, sSearch, _
        sReplace) 
      objFSO.MoveFolder objSFolder.Path, strNewName 
    Else 
      strNewName = objSFolder.Path 
    End If 
     
    For Each objFile In objFolder.Files 
      If objFile.Name Like "*" & sSearch & "*" Then 
        strNewName = objFile.ParentFolder.Path & "\" & Replace(objFile.Name, sSearch, sReplace) 
        objFSO.MoveFile objFile.Path, strNewName 
      End If 
    Next 
    If objFolder.Name Like "*" & sSearch & "*" Then 
      strNewName = objFolder.ParentFolder.Path & "\" & Replace(objFolder.Name, sSearch, _
        sReplace) 
      objFSO.MoveFolder objFolder.Path, strNewName 
    End If 
    Call renameFilesAndFolders(strNewName, sSearch, sReplace) 
  Next 
  Set objFSO = Nothing 
  Set objFolder = Nothing 
  Set objSFolder = Nothing 
  Set objFile = Nothing 
End Sub 

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 16 - mit VBAHTML 12.6.0


 ABCDEF
1Gruß Sepp
2
3

Anzeige
AW: Ordner, Unterordner, Dateien finden und umbenennen
21.09.2018 12:43:06
Ete
Hi Sepp,
danke für deine Rückmeldung. Nun ist es leider so, dass dein Code nur funktioniert, wenn der erste ausgewählte Ordner also die Zieldatei den Suchstring enthält. Dieser wird auch umbenannt. Der Auswahlordner nun den Suchstring nicht enthält ergibt sich eine Fehlermeldung.
Des Weiteren funktioniert er lediglich in den Ordnern, wo Unterordner bzw. Dokumente liegen.
Ich habe versucht mich durch deine Folder und Subfolder struktur zu arbeiten aber komme da nicht weiter. Vielleicht, könntest du mit Kommentaren in deinem Code helfen. Vielleicht komme ich dann selbst auf die Lösung.
Grüße
Ete
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Ordner und Dateien mit VBA umbenennen


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.

  2. Füge ein neues Modul hinzu:

    • Rechtsklick auf "VBA-Projekt" > "Einfügen" > "Modul".
  3. Kopiere und füge den folgenden Code ein:

    Option Explicit
    
    Sub renaming()
       Dim strInitalPath As String, strSearch As String, strReplace As String
       Dim objMFSO As Object, objMFolder As Object
    
       On Error GoTo Errorhandler1
    
       With Application.FileDialog(msoFileDialogFolderPicker)
           .AllowMultiSelect = False
           .Title = "Bitte Ordner wählen"
           .InitialFileName = ThisWorkbook.Path
           .InitialView = msoFileDialogViewThumbnail
           .ButtonName = "select"
           If .Show = -1 Then
               strInitalPath = .SelectedItems(1)
           End If
       End With
    
       strSearch = InputBox("Gib den Suchstring ein:")
       strReplace = InputBox("Gib den Ersetzstring ein:")
    
       Call renameFilesAndFolders(strInitalPath, strSearch, strReplace)
       MsgBox "Renaming finalized"
       Exit Sub
    
    Errorhandler1:
       MsgBox "Error: Bitte kontaktieren Sie den Support."
    End Sub
    
    Sub renameFilesAndFolders(StartFolder As String, sSearch As String, sReplace As String)
       Dim objFSO As Object, objFolder As Object, objSFolder As Object, objFile As Object
       Dim strNewName As String
    
       Set objFSO = CreateObject("Scripting.FileSystemObject")
       Set objFolder = objFSO.GetFolder(StartFolder)
    
       For Each objSFolder In objFolder.SubFolders
           For Each objFile In objSFolder.Files
               If objFile.Name Like "*" & sSearch & "*" Then
                   strNewName = objFile.ParentFolder.Path & "\" & Replace(objFile.Name, sSearch, sReplace)
                   objFSO.MoveFile objFile.Path, strNewName
               End If
           Next
           If objSFolder.Name Like "*" & sSearch & "*" Then
               strNewName = objSFolder.ParentFolder.Path & "\" & Replace(objSFolder.Name, sSearch, sReplace)
               objFSO.MoveFolder objSFolder.Path, strNewName
           End If
           Call renameFilesAndFolders(objSFolder.Path, sSearch, sReplace)
       Next
    End Sub
  4. Führe das Makro aus:

    • Drücke F5, um das renaming-Makro auszuführen.
  5. Wähle den Ordner aus, in dem die Dateien umbenannt werden sollen, und gib die Such- sowie Ersetzstrings ein.


Häufige Fehler und Lösungen

  • Fehler: "Outlook Ordner umbenennen geht nicht"

    • Stelle sicher, dass der Outlook-Ordner nicht geöffnet ist. Schließe Outlook vor dem Ausführen des Skripts.
  • Fehler: Keine Umbenennung in der ersten Ebene

    • Achte darauf, dass die Schleife in der Funktion renameFilesAndFolders auch die Dateien in der obersten Ebene berücksichtigt. Füge eine entsprechende Schleife hinzu.

Alternative Methoden

  • PowerShell-Skript: Du kannst auch PowerShell nutzen, um Dateien und Ordner in Windows umzubenennen. Dies kann besonders nützlich sein, wenn du eine große Anzahl von Dateien umbenennen möchtest.

  • Batch-Dateien: Erstelle Batch-Dateien, um mehrere Umbenennungen durchzuführen, besonders wenn du einfache Umbenennungen ohne VBA durchführen möchtest.


Praktische Beispiele

  1. Umbenennen von Dateien in einem Ordner:

    • Stelle dir vor, du hast einen Ordner mit Dateien, deren Namen alle "Bericht_2023" enthalten und du möchtest diese in "Bericht_2024" umbenennen.
  2. Umbenennen eines OneDrive-Ordners:

    • Du kannst den gleichen VBA-Code verwenden, um einen OneDrive-Ordner umzubenennen, indem du den Pfad zu deinem OneDrive-Ordner angibst.

Tipps für Profis

  • Verwende Variablen für Pfade: Halte deine Pfade in Variablen, um die Wartbarkeit deines Codes zu verbessern.
  • Debugging: Nutze Debug.Print, um Variablenwerte während der Ausführung anzuzeigen und zu überprüfen.
  • Modularisierung: Teile deinen Code in verschiedene Module auf, um die Lesbarkeit und Wiederverwendbarkeit zu erhöhen.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Ordner gleichzeitig umbenennen? Du kannst die Schleife in deinem VBA-Skript anpassen, um mehrere Ordner zu durchlaufen.

2. Funktioniert der Code in Excel Online? Der VBA-Code funktioniert nur in der Desktop-Version von Excel, nicht in Excel Online.

3. Wie kann ich die Umbenennung auf bestimmte Dateitypen beschränken? Erweitere die If-Bedingungen im Skript, um nur bestimmte Dateitypen (z.B. .txt oder .docx) zu bearbeiten.

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