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

Forumthread: Ordner mit Unterordnern/Dateien kopieren

Ordner mit Unterordnern/Dateien kopieren
06.08.2008 22:40:53
Peter
Hallo Ihr lieben,
hab jetzt intensiv die Recherche gequält oder war es umgekehrt?
Es is relstiv einfach zu beschreiben was ich möchte:
Auf einem Stick habe ich einen Ordner mit Unterordnern/Dateien die ich aus der Excel heraus in einen neu zu bildenden Ordner C:\Test kopieren möchte.
Wie macht man sowas in Office 2007, dass es auch in älteren Versionen funktioniert?
Danke für Euere Impulse
Peter S

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ordner mit Unterordnern/Dateien kopieren
Ramses
Hallo
Da sollte schon was dabei sein
http://www.google.ch/search?hl=de&q=folder+copy+excel+vba&btnG=Google-Suche&meta=
Aber es reicht auch ein Blick in VBA-Online Hilfe
*******************
CopyFolder-Methode
Beschreibung
Kopiert einen Ordner von einem Ort an einen anderen.
Syntax
Objekt.CopyFolder Quelle, Ziel[, überschreiben]
Die Syntax der CopyFolder-Methode besteht aus folgenden Teilen:
Teil Beschreibung
Objekt Erforderlich. Immer der Name eines FileSystemObject.
Quelle Erforderlich. Zeichenfolge für die Ordnerspezifikation für einen oder mehrere zu kopierende Ordner, die Platzhalterzeichen enthalten kann.
Ziel Erforderlich. Zeichenfolge für das Ziel, an das die Ordner und Unterordner aus Quelle kopiert werden sollen. Platzhalterzeichen sind nicht zulässig.
überschreiben Optional. Boolescher Wert, der angibt, ob vorhandene Ordner überschrieben werden. Wenn er True ist, werden die Ordner überschrieben; ist er False, werden sie nicht überschrieben. Die Voreinstellung ist True.
Anmerkungen
Platzhalterzeichen können nur in der letzten Pfadkomponente des Arguments Quelle verwendet werden. Sie können z.B. folgendes verwenden:
FileSystemObject.CopyFolder "c:\mydocuments\letters\*", "c:\tempfolder\"
Nicht aber:
FileSystemObject.CopyFolder "c:\mydocuments\*\*", "c:\tempfolder\"
Wenn Quelle Platzhalterzeichen enthält oder Ziel mit einem Pfadtrennzeichen (\) endet, wird angenommen, daß Ziel ein vorhandener Ordner ist, in den übereinstimmende Ordner und Unterordner kopiert werden sollen. Andernfalls wird angenommen, daß Ziel der Name eines zu erstellenden Ordners ist. In beiden Fällen können beim Kopieren eines einzelnen Ordners vier Dinge passieren.
Wenn es Ziel nicht gibt, wird der Quellordner und sein gesamter Inhalt kopiert. Dies ist normalerweise der Fall.
Wenn Ziel eine vorhandene Datei ist, kommt es zu einem Fehler.
Wenn es sich bei Ziel um ein Verzeichnis handelt, wird versucht, den Ordner und seinen gesamten Inhalt zu kopieren. Wenn eine in Quelle enthaltene Datei bereits in Ziel vorhanden ist, kommt es zu einem Fehler, wenn überschreiben False ist. Andernfalls wird versucht, die Datei über die vorhandene Datei zu kopieren.
Wenn es sich bei Ziel um ein schreibgeschütztes Verzeichnis handelt, kommt es zu einem Fehler, wenn Sie versuchen, eine vorhandene schreibgeschützte Datei in dieses Verzeichnis zu kopieren und überschreiben False ist.
Es kommt außerdem zu einem Fehler, wenn eine Quelle, die Platzhalterzeichen verwendet, mit keinem der Ordner übereinstimmt.
Die CopyFolder-Methode hält beim ersten aufgetretenen Fehler an. Es wird nicht versucht, Änderungen zurückzusetzen oder aufzuheben, die vor dem Auftreten eines Fehlers durchgeführt wurden.
*************************
Gruss Rainer

Anzeige
AW: Ordner mit Unterordnern/Dateien kopieren
06.08.2008 23:49:17
Peter
Hallo Ramses,
es sollte dann doch wie nachstehend funktionieren?
Option Explicit

Sub Kopieren()
Dim filesystem As Object
Dim name As String
name = "HSVInnSalzach"
Set filesystem = CreateObject("Scripting.FileSystemObject")
filesystem.CopyFolder "E:\Obedience\HSVInnSalzach\*", "C:\Obedience\" & name
Set filesystem = Nothing
End Sub


Sagt aber immer Pfad niocht gefunden? Wo liegt der Fehler
Danke
Peter S

Anzeige
AW: Ordner mit Unterordnern/Dateien kopieren
07.08.2008 07:37:00
Erich
Hallo Peter,
mit
filesystem.CopyFolder "E:\Obedience\HSVInnSalzach\*", "C:\Obedience\" & name
versuchst du, alle Unterordner von E:\Obedience\HSVInnSalzach auf die Festplatte zu kopieren.
Der Zielordner C:\Obedience\" & name, in den diese Unterordner sollen, muss dann schon existieren.
Vermutlich brauchst du keinen Platzhalter. Probier mal
filesystem.CopyFolder "E:\Obedience\HSVInnSalzach", "C:\Obedience\"
Evtl. willst du noch den dritten Parameter (Vorh. Dateien überschreiben) verwenden,
dann musst du ,True oder ,False hinten anhängen.
Die Variable name brauchst du vielleicht nicht mehr.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Ordner mit Unterordnern/Dateien kopieren
07.08.2008 08:10:14
Peter
Hallo Erich G,
zunächst mal vielen Dank für Deine Hilfe.
Sicherlich wäre die feste Adressierung das Einfachste. Jedoch geht es mir um folgendes:
Da meine Applikation von Vereinen genutzt wird und jeder PC ne andere Hardware/Software-Konfiguration besitzt, lese ich per
Sheets("Tabelle1").Range("A1") = Application.Version
Sheets("Tabelle1").Range("A2") = ThisWorkbook.Path
die Office Version und den augenblicklichen Pfad des Sticks bzw der CD aus.
Diese Variablen will ich dann in meine Prozedur einbauen. Meine eigentliche Applikation für die Vereine ist schon fertig, jedoch erlebe ich die abenteuerlichsten Dinge. Mal fehlen die WebComponents, mal ist ne refedit.dll ohne Verweis, mal sind die microsoft forms nicht vorhanden, manche versuchen das mit Open Office und Win 98. Und dann habe ich immer Ärger und man behauptet meine Applikation würde nicht laufen.
Jetzt habe ich die Schna.. voll davon und erstelle ein Tool, das den individuellen PC so vorbereitet, dass alles automatisiert abläuft, bis hin zum Kopieren meiner Ordnerstruktur in den richtigen Pfad und Erstellen einer Verknüpfung auf den Desktop.
Dieses Tool werde ich nach Fertigstellung auch hier auf den Server laden, denke das können etliche Leute gebrauchen.
Freue mich auf weitere Tips
Dank
Peter S

Anzeige
AW: Ordner mit Unterordnern/Dateien kopieren
07.08.2008 08:31:00
Peter
Hallo Erich G,
im Moment sieht mein Code folgendermassen aus und funktioniert auch bereits gut.

Sub Kopieren()
Dim filesystem As Object
Dim PathE As String
MkDir "C:\Obedience"
MkDir "C:\Obedience\HSVInnSalzach"
PathE = Sheets("Tabelle1").Range("A2")
Set filesystem = CreateObject("Scripting.FileSystemObject")
filesystem.CopyFolder PathE, "C:\Obedience\HSVInnSalzach"
Set filesystem = Nothing
End Sub


Dies muss so sein da ja der Quellordner u.U. jedesmal woanders liegt, der Zielordner jedoch immer direkt unterhalb der Root.
Gruß
Peter S

Anzeige
AW: Ordner mit Unterordnern/Dateien kopieren
07.08.2008 08:45:29
ransi
HAllo
Wenn du da etwas variabler mit dem Zielordner sein willst, schau dir mal dies an:
Option Explicit

Private Declare Function MakeSureDirectoryPathExists Lib "imagehlp.dll" ( _
    ByVal DirPath As String) As Long

Public Sub test()
Dim Ziel
Dim Quelle
Dim FSO
Ziel = "C:\Temp\zum Testen\"
Quelle = ThisWorkbook.Path
Set FSO = CreateObject("Scripting.FileSystemObject")
MakeSureDirectoryPathExists Ziel
FSO.CopyFolder Quelle, Ziel
Set FSO = Nothing
End Sub


ransi

Anzeige
AW: Ordner mit Unterordnern/Dateien kopieren
07.08.2008 08:43:00
Erich
Hi Peter,
du bist recht sparsam mit Infos. Weitere Tipps zu geben fällt daher schwer.
Funzt jetzt das Kopieren mit CopyFolder - erst mal mit den festen Verzeichnisnamen?
Du schreibst, dass du ThisWorkbook.Path ausliest. Ist das dann der Ordner, der komplett kopiert werden soll?
Wohin soll der Ordner kopiert werden? Ist der Name des Zielordners abhängig von ThisWorkbook.Path?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: hat sich erledigt
07.08.2008 08:47:00
Erich
Hi Peter,
habe dein letztes Posting gerade erst gesehen.
Grüße von Erich aus Kamp-Lintfort

AW: Ordner mit Unterordnern/Dateien kopieren
07.08.2008 08:48:23
Ramses
Hallo
am elegantesten löst du es wohl so
Option Explicit

Sub test()
    Dim myFSO As Object
    Dim tarMain As String, tarSub As String
    Set myFSO = CreateObject("scripting.Filesystemobject")
    tarMain = Range("A1")
    tarSub = Range("A2")
    If Not myFSO.folderexists(tarMain) Then
        MkDir tarMain
        ElseIf Not myFSO.folderexists(tarSub) Then
        MkDir tarSub
    End If
    With myFSO
        .copyfile ThisWorkbook.Path & "\*.*", tarMain, True
        'Wenn vorhanden
        '.copyfile ThisWorkbook.Path & "\SubFolder\*.*", tarSub, True
    End With
End Sub

Gruss Rainer

Anzeige
AW: Ordner mit Unterordnern/Dateien kopieren
07.08.2008 09:30:00
Peter
Hallo Ramses,
wow, ne super Lösung...
Vielen Dank
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Ordner mit Unterordnern in Excel kopieren


Schritt-für-Schritt-Anleitung

Um Ordner mit Unterordnern und Dateien in Excel mit VBA zu kopieren, kannst Du die CopyFolder-Methode des FileSystemObject (FSO) verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Aktiviere die Entwicklertools in Excel:

    • Gehe zu Datei > Optionen > Menüband anpassen und aktiviere Entwicklertools.
  2. Öffne den VBA-Editor:

    • Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.
  3. Füge ein neues Modul hinzu:

    • Rechtsklicke auf VBAProject (DeineDateiName) > Einfügen > Modul.
  4. Füge den folgenden Code ein:

    Sub Kopieren()
       Dim filesystem As Object
       Dim sourcePath As String
       Dim targetPath As String
    
       sourcePath = "E:\Obedience\HSVInnSalzach" ' Quellordner
       targetPath = "C:\Obedience\HSVInnSalzach" ' Zielordner
    
       Set filesystem = CreateObject("Scripting.FileSystemObject")
    
       ' Zielordner erstellen, falls nicht vorhanden
       If Not filesystem.FolderExists(targetPath) Then
           filesystem.CreateFolder targetPath
       End If
    
       ' Ordner kopieren
       filesystem.CopyFolder sourcePath, targetPath
    
       Set filesystem = Nothing
    End Sub
  5. Passe die Quell- und Zielpfade an:

    • Stelle sicher, dass Du die sourcePath und targetPath Variablen an Deine Bedürfnisse anpasst.
  6. Führe das Makro aus:

    • Gehe zurück zu Excel, drücke ALT + F8, wähle Kopieren und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Fehler: "Pfad nicht gefunden"

    • Überprüfe, ob der Quellordner korrekt angegeben ist und existiert. Stelle sicher, dass Du den vollständigen Pfad verwendest.
  • Fehler: "Zielordner existiert bereits"

    • Wenn Du versuchst, einen Ordner zu kopieren, der bereits existiert, kannst Du den dritten Parameter in CopyFolder auf True setzen, um vorhandene Dateien zu überschreiben.
  • Fehler: "Zugriff verweigert"

    • Stelle sicher, dass Du die erforderlichen Berechtigungen hast, um auf die Quelldateien und den Zielordner zuzugreifen.

Alternative Methoden

  • Ordnerstruktur ohne Inhalt kopieren: Um nur die Ordnerstruktur zu kopieren, kannst Du die CreateFolder-Methode in einer Schleife verwenden, um alle Unterordner manuell zu erstellen.

  • Dateien aus Unterordnern extrahieren: Um alle Dateien aus Unterordnern in einen bestimmten Ordner zu kopieren, kannst Du eine Schleife verwenden, um durch die Unterordner zu iterieren und die CopyFile-Methode anzuwenden.

Sub DateienAusUnterordnernKopieren()
    Dim fso As Object
    Dim sourceFolder As Object
    Dim targetFolder As Object
    Dim subfolder As Object
    Dim file As Object
    Dim sourcePath As String
    Dim targetPath As String

    sourcePath = "E:\Obedience\HSVInnSalzach"
    targetPath = "C:\Obedience\HSVInnSalzach"

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set sourceFolder = fso.GetFolder(sourcePath)
    Set targetFolder = fso.CreateFolder(targetPath)

    For Each subfolder In sourceFolder.Subfolders
        For Each file In subfolder.Files
            fso.CopyFile file.Path, targetFolder.Path & "\" & file.Name
        Next file
    Next subfolder
End Sub

Praktische Beispiele

  • Beispiel 1: Kopieren eines gesamten Ordners: Verwende den Code im Abschnitt "Schritt-für-Schritt-Anleitung", um einen kompletten Ordner mit Unterordnern zu kopieren.

  • Beispiel 2: Nur Ordnerstruktur kopieren: Um nur die Struktur zu kopieren, kannst Du eine Schleife implementieren, die nur die Ordner mit CreateFolder erstellt.

  • Beispiel 3: Dateien aus mehreren Unterordnern in einen Zielordner kopieren: Nutze das oben angegebene Beispiel, um alle Dateien aus mehreren Unterordnern in einen einzigen Zielordner zu kopieren.


Tipps für Profis

  • Verwende ThisWorkbook.Path: Wenn Du den Pfad der aktuellen Arbeitsmappe verwenden möchtest, nutze ThisWorkbook.Path, um den Quellordner dynamisch festzulegen.

  • Fehlerbehandlung hinzufügen: Implementiere eine Fehlerbehandlung, um sicherzustellen, dass Dein Code robust ist und bei unerwarteten Fehlern nicht abstürzt.

  • Verwende Application.FileDialog: Du kannst Application.FileDialog verwenden, um dem Nutzer zu ermöglichen, den Quellordner über eine grafische Benutzeroberfläche auszuwählen.


FAQ: Häufige Fragen

1. Wie kann ich die Ordnerstruktur in Excel kopieren? Du kannst die Ordnerstruktur in Excel kopieren, indem Du die CreateFolder-Methode in einer Schleife verwendest, um alle Unterordner zu erstellen.

2. Funktioniert dieses Skript in älteren Excel-Versionen? Ja, der Code sollte auch in Office 2007 und älteren Versionen funktionieren, solange die VBA-Funktionalität unterstützt wird.

3. Kann ich auch Dateien aus Unterordnern in einen Ordner kopieren? Ja, Du kannst die CopyFile-Methode verwenden, um Dateien aus Unterordnern in einen bestimmten Zielordner zu kopieren.

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