Clever-Excel-Forum

Normale Version: VBA: Alle Datein in Ordner umbenennen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Hallo JereMaia,

ich hab die Datei mal angefügt. Aber nicht zuviel erwarten.

Ich hab's einfach im VBA-Editor manuell gestartet.
Die ersten Schritt-für-Schritt-Tests (F8) waren einwandfrei, hab's dann mit F4 laufen lassen und bekam irgendwann den Fehler, dass die Datei schon existiert. Da habe ich festgestellt, das mein Makro irgendeinen Scheiß macht.
Hab dann die Debug.Print-Zeile eingefügt und ohne wirkliche Umbenenung laufen lassen. Das ging.
Hab dann den Zähler ergänzt, um zu sehen, ob er alle Dateien bearbeitet.

Aber es scheint wirklich daran zu liegen, dass Dir() schon umbenannte Dateien nochmals anfasst (was für mich völlig unlogisch ist).

Gruß,
Lutz

Hallo zusammen,

ich habe mein Makro jetzt nochmal dahingehend geändert, dass ich über Instr() den ersten "." suche. Wenn der bei 17 ist, handelt es sich um eine nicht geänderte Datei und der Name wird geändert.
Außerdem lasse ich mit meinem Zähler alle geprüften Dateien zählen und mit einem weiteren Zähler alle Änderungen.
Mit der Instr()-Abfrage läuft es bis zum Ende durch.

Ergebnis der Zähler:
  Das Makro ändert alle 526 Dateinamen  Blush.
  Das Makro prüft 875 (!) Dateien Huh .

Das verstehe jetzt jemand.
Sollte Dir() Dateien nach der Umbenennung nochmals anfassen, müssten doch eigentlich 1051 oder 1052 Dateien geprüft werden, oder?

Gruß,
Lutz
Könnte es sein, das das Makro in der Mappe Dein alter Code ist?
Da wird nichts überprüft, ob ein Punkt ab einer bestimmten Stelle vorhanden ist oder nicht.


Code:
Sub Dateien_umbenennen()
Dim Pfad As String
Dim Datei As String
Dim Anzahl As Integer
Pfad = "G:\Produktion\Produktionsreporting\Personal\Test\"
Datei = Dir(Pfad)
Anzahl = 0
Do Until Datei = ""
Anzahl = Anzahl + 1
Debug.Print Anzahl, Datei, "Personalliste " & Mid(Datei, 21, 4) & Mid(Datei, 18, 2) & Mid(Datei, 15, 2) & " erl.xlsx"
   Name Pfad & Datei As Pfad & "Personalliste " & Mid(Datei, 21, 4) & Mid(Datei, 18, 2) & Mid(Datei, 15, 2) & " erl.xlsx"
Datei = Dir()
Loop
End Sub
Uups...
1. Tipp: Die Zeile

Code:
Datei = Dir(Pfad)

würde ich abändern in:

Code:
Datei = Dir(Pfad & "*.xlsx", vbNormal)

Wenn andere Dateien noch in dem Verzeichnis sind als Excel-Dateien, dann werden diese dadruch übergangen. Das würde ich aus Sicherheitsgründen machen.

2. Deine Aussage
"...
Ergebnis der Zähler:
Das Makro ändert alle 526 Dateinamen Blush.
Das Makro prüft 875 (!) Dateien Huh .
..."

kann schon sein, denn Dein Code zählt in der Zahl 875 ALLE Dateien mit. Die die geändert werden und die, die nicht mehr geändert werden müssen. In der Zahl 526 sind NUR die enthalten, die durch den Code geänderten wurden.
Hallo JereMaia,

das Verzeichnis enthält nur die 526 ".xlsx"-Dateien.
Daher habe ich auf weitere Angaben im ersten Dir() verzichtet.

Wenn Dir() jede Datei nur einmal anfasst müsste Anzahl und AnzahlNeu 526 sein, wenn Dir() Dateien nach der Umbenennung nochmals anfasst müsste Anzahl 1051 und Anzahl neu 526 sein. So jedenfalls mein Verständnis.

Ich hab jetzt alle Dateien mit dem geänderten Code umbenannt und die Stichprobenprüfung sah richtig aus. Ich hatte noch einen zweiten Ordner zum Umbenennen, da ist das Makro komischerweise gelaufen wie erwartet (47 Dateien angefasst, 47 Dateien umbenannt).

Aus meiner Sicht ist der Thread erledigt (als gelernt entnehme ich, dass man eine zweite Umbenennung über eine Prüfung geschickt ausschließen muss).

Vielen Dank für Deine Hilfe,
Lutz
Okay. Super! Xmas21
Noch n Gedicht (via FSO); aufgrund Hinweis von JereMaia -> div. Dateiendungen
Code:
Option Explicit

Sub DateienUmbenennenViaFSO()
    Dim fso As Scripting.FileSystemObject
    Dim fil As Scripting.File
    Dim sPath As String
    '
    Set fso = New Scripting.FileSystemObject
    '
    For Each fil In fso.GetFolder("c:\Test\").Files
        Select Case fso.GetExtensionName(fil)
            Case "xlsx", "xlsm"
                'Rename
                Debug.Print fil
        End Select
    Next fil
End Sub

Methode zum Umbenennen findest sicherlich selbst
Seiten: 1 2