Hi Heiko,
so, hab nach dem Film doch noch ein bissl rumgespielt, hier das Ergebnis. Erstelle ein neues Klassenmodul und gib ihm z.B. den Namen FileObject. Der folgende Code gehört dann in das Klassenmodul.
Dim FullPath As String 'entspricht Pfad & "\" & Datei
Dim iName As String
Property Get Name() As String
Name = iName
End Property
Property Let Name(n As String)
Dim fs As Object, fld As Object, fl As Object
If iName = "" Then
iName = n
Else
Set fs = CreateObject("Scripting.FileSystemObject")
Set fl = fs.GetFile(FullPath)
If n <> iName Then
fl.Name = n
iName = n
FullPath = fl.Path
End If
End If
End Property
Property Get Path() As String
Path = Left(FullPath, InStrRev(FullPath, "\") - 1)
End Property
Property Let Path(p As String)
Dim fs As Object, fld As Object, fl As Object
If FullPath <> "" Then
If Right(p, 1) <> "\" Then p = p & "\"
Set fs = CreateObject("Scripting.FileSystemObject")
Set fl = fs.GetFile(FullPath)
If p <> FullPath Then
If Not fs.folderexists(p) Then fs.createfolder p
fl.Move p
FullPath = fl.Path
End If
Else
FullPath = p
End If
End Property
In einem normalen Modul (z.B. Modul1) kannst du nun auf dieses Klassenmodul zugreifen mit folgendem Code:
Sub KlasseSetzen()
Dim myFiles As New Collection, fs As Object, fld As Object, fl As Object, SuchOrdner As String
SuchOrdner = "D:\Pfad\Tests\Mitarbeiterliste"
NeuerOrdner = "D:\Pfad\meineTests\Personaldaten"
NeuerName = "xyz.xlsx"
Set fs = CreateObject("Scripting.FileSystemObject")
Set fld = fs.GetFolder(SuchOrdner)
MsgBox fld.Files.Count & " Files im Ordner " & SuchOrdner
For Each fl In fld.Files
myFiles.Add New FileObject, fl.Path
myFiles(myFiles.Count).Name = fl.Name
myFiles(myFiles.Count).Path = fl.Path
Next fl
MsgBox myFiles(1).Path
MsgBox myFiles(2).Name
myFiles(1).Path = NeuerOrdner
myFiles(2).Name = NeuerName
MsgBox myFiles(1).Path
MsgBox myFiles(2).Name
End Sub
Der Code legt für jede Datei im Suchordner ein neues Klassenmodul als FileObject an. Diesem kannst du beliebige Eigenschaften und Methoden zuweisen. Habe hier mal nur die Name und die Path-Eigenschaft angelegt. Wenn du bei einem dieser benutzerdefinierten FileObjekte die Path-Eigenschaft änderst wird die Datei in den neuen Pfad verschoben. Änderst du hingegen die Name-Eigenschaft, wird die Datei umbenannt. Probiers aus.
Und wie gesagt, lies dich einfach mal in die Materie ein. Klassen sind zwar aufwendig zu erstellen, aber im Nachhinein benötigt man nicht mehr so viel Code im Hauptmodul. Das spart viel Tipparbeit und bewahrt die Übersicht.
Gruß Mr. K.