ich habe ein „Muster-Verzeichnis“, darin einige Unterverzeichnisse. Das möchte ich gerne komplett, also incl. Unterverzeichnisse, kopieren - auch innerhalb desselben Verzeichnisses, wobei ich das dann natürlich umbenennen muss.
Geht das?
„Filecopy“ funktioniert da wohl nicht.
Function Copy\_Folder(sSource As String, sTarget As String) As Boolean
Dim FSO As Object
If Right(sSource, 1) = "\" Then
sSource = Left(sSource, Len(sSource) - 1)
End If
If Right(sTarget, 1) = "\" Then
sTarget = Left(sTarget, Len(sTarget) - 1)
End If
Set FSO = CreateObject("scripting.filesystemobject")
If FSO.FolderExists(sSource) = False Then
Copy\_Folder=False
End If
FSO.CopyFolder Source:=sSource, Destination:=sTarget
Copy\_Folder=True
End Function
Anwendungsbeispiel:
If Copy\_Folder("C:\Kopieren\Von\Hier","C:\Nach\Hier") Then
MsgBox "Erfolgreich kopiert."
Else
MsgBox "Fehler beim kopieren."
End If
ich habe ein „Muster-Verzeichnis“, darin einige
Unterverzeichnisse. Das möchte ich gerne komplett, also incl.
Unterverzeichnisse, kopieren -
auch innerhalb desselben Verzeichnisses,
innerhalb welchen Verzeichnisses?
wobei ich das dann natürlich umbenennen muss.
Wenn Muster_Verzeichnis das gemeinte Verzeichnis ist brauchste doch nicht umzubennen. Unterverzeichnis „Muster_Verzeichnis“ im Verzeichnis „Muster_Verzeichnis“ ist doch okay.
Beschreib bitte genauer was da von wo nach wo kopiert werden soll.
Geht das?
Ich gehe davon aus.
„Filecopy“ funktioniert da wohl nicht.
Möglich, ein eindeutiges Nein kann ich jetzt nicht sagen. Könnte ja sein es gibt rekursive Funktionen die Dateien einzeln per filecopy rüberschaufeln.
m.E. gibt es bei dieser Codezeile eine Fehlermeldung wenn
sSource oder sTarget nicht existieren.
Zumindest, wenn „sSource“ nicht existiert. Aber genau deswegen findet sich unmittelbar davor dieser Code:
If FSO.FolderExists(sSource) = False Then
Copy\_Folder=False
End If
Soll heissen: Wenn „sSource“ nicht existiert, gibt „Copy_Folder“ den Wert „False“ zurück, noch bevor der Versuch unternommen wird irgendetwas zu kopieren.
Was passiert, wenn „sTarget“ nicht existiert, da bin ich mir nicht ganz sicher. Sollte aber funktionieren, da beim rekursiven kopieren einer Ordnerstruktur alle nicht existierenden Zielpfade automatisch erstellt werden. (zumindest normalerweise…)
m.E. gibt es bei dieser Codezeile eine Fehlermeldung wenn
sSource oder sTarget nicht existieren.
Zumindest, wenn „sSource“ nicht existiert. Aber genau deswegen
findet sich unmittelbar davor dieser Code:
If FSO.FolderExists(sSource) = False Then
Copy_Folder=False
End If
Soll heissen: Wenn „sSource“ nicht existiert, gibt
„Copy_Folder“ den Wert „False“ zurück, noch bevor der Versuch
unternommen wird irgendetwas zu kopieren.
jain, :„Copy_Folder“ bekommt den Wert False ABER der Code läuft weiter und trifft auf
FSO.CopyFolder Source:=sSource, Destination:=sTarget
dann "knallst wenn es „sSource“ nicht gibt.
M.E. müßte die IF-Abfrage so aussehen:
If FSO.FolderExists(sSource) = False Then
Copy\_Folder=False
**Exit Function**
End If
Was passiert, wenn „sTarget“ nicht existiert, da bin ich mir
nicht ganz sicher. Sollte aber funktionieren, da beim
rekursiven kopieren einer Ordnerstruktur alle nicht
existierenden Zielpfade automatisch erstellt werden.
(zumindest normalerweise…)
Okay, ich glaube du hast Recht und ich stimme dir beim „sollte“ zu. GANZ sicher bin ich mir aber auch nicht.
danke, klappt auf Anhieb! Allerdings muss ich mein „Muster-Verzeichnis“ noch einbetten in ein übergeordnetes Verzeichnis, da die
Function Copy\_Folder(sSource As String, sTarget As String) As Boolean
nur die Unterverzeichnisse von „sSource“ nach „sTarget“ kopiert.
So sieht es bei mir aus:
Muster-Verzeichnis
|
+--- Muster-Verzeichnis
|
+--- Originale
|
+--- Film
|
+--- Ton
In den Unterverzeichnissen können weitere Verzeichnisse sein. Das Ganze dient zum Anlegen neuer Film-/Videoprojekte mit Originalen (Bildern und Videoclips), Filmdateien, Audiodateien usw. Das zweite „Muster-Verzeichnis“ bekommt in „sTarget“ dann den Projektnamen.
Hi, ich frage mal wieso aus VBA?
Ist dass ggf. Teil eine komplexeren Anwendun?
Für copyjobs nutze ich entweder die befehlszeile, oder robocopy.
Beides lässt sich wunderbar automatisieren z.B. zur Datensicherung.
Fragen? einfach mailen. Ich biete auch ggf. Unterstützung via Teamviewer an.