Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1856to1860
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

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
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
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?!
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

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige