Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Dateien und Ordner kopieren

Dateien und Ordner kopieren
20.11.2016 13:45:09
Barbara
Hallo
ich bräuchte einige Hintergrundinformationen zu einem Makro, das ich im Internet gefunden habe. Es kopiert Ordner.
Set fso = CreateObject("Scripting.FileSystemObject")
Set F1 = fso.GetFolder(sDatei1)
F1.Copy (sdatei2)
(kann diese Zeilen leider nicht so schön darstellen, wie andere in diesem Forum)
wobei sdatei1 und sdatei2 Pfad mit Ordnernamen als String sind.
Dazu einige Fragen:
Da wird offensichtlich ein Objekt angelegt, weiss es aber nicht genau, weil Neuland für mich.
Was bedeuten hier die Ausdrücke Scripting und FileSystemObject?
Was kann man alles damit machen? Ich sehe, dass .Getfolder und .Copy das machen, was ich erreichen will. Doch will ich mehr.
Ich würde unter anderem zum Beispiel prüfen wollen, ob ein bestimmter Ordner existiert und leer ist.
Nun, was noch alles kann man damit tun? Bietet das noch weitere Funktionen? Kann man das im VBA-Editor irgendwo sehen? Die automatische Vervollständigungsautomatik scheint hier nichts herzugeben.
LG, B.
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Dateien und Ordner kopieren
20.11.2016 17:58:28
ransi
Hallo BArbara,
Gib in der VBA-Hilfe mal "scripting" ein.
Dann kommt die Hilfe zum FilesystemObject.
ransi
AW: Dateien und Ordner kopieren
20.11.2016 22:13:59
Barbara
Hab es gefunden, ransi. Danke
Dazu noch einige Fragen:
Wenn ich nur eine Datei kopieren will, kann ich aber statt fso.copyfile auch FileCopy verwenden, das ich gleich verwenden kann, ohne extra ein Objekt erzeugen zu müssen. Ist das zu bevorzugen?
Außerdem funktioniert bei fso. die Autovervollständigung nicht, mit der Auswirkung, dass eine falsch buchstabierte Methode, wenn ich zB fso.Kopyfile eintippe, sich erst beim Ausführen mit einer Fehlermeldung bemerkbar macht.
LG, B
Anzeige
Early binding, dann funzt intellisens
21.11.2016 10:21:40
ransi
Hallo Barbara,
Setz mal unter:
Extras-Verweise den Verweis auf die Microsoft Scripting Runtime Bibliothek.
Userbild
Jetzt kennt dein VBE das FilesystemObject.
Option Explicit

Sub machs()
Dim FSO As Object
Dim objFolder As Folder
Set FSO = New Scripting.FileSystemObject
Set objFolder = FSO.GetFolder("C:/Temp")

End Sub


So funktioniert dann auch intellisens.
ransi
Anzeige
AW: Early binding, dann funzt intellisens
21.11.2016 19:16:57
Barbara
Hi ransi,
habe den haken gesetzt.
intellisens geht aber trotzdem nicht.
Woran kann das liegen?
LG, B.
AW: Early binding, dann funzt intellisens
21.11.2016 19:21:07
ransi
HAllo,
Du musst dann das FSO so deklarieren:
Sub machs()
Dim FSO As Object
Dim objFolder As Folder
Set FSO = New Scripting.FileSystemObject
Set objFolder = FSO.GetFolder("C:/Temp")
End Sub
Nicht mit Createobject....
ransi
Anzeige
AW: Early binding, dann funzt intellisens
21.11.2016 19:54:34
Barbara
Hab ich ja gemacht.
Immerhin, die Kleinbuchsteben werden automatisch korrigiert:
Set objFolder = FSO.GetFolder("C:/Temp")
Wenn ich schreibe:
Set objFolder = FSO.
sollte ja ein Vorschlag kommen, oder? Das ist doch Intelliesense, oder?
LG, B.
AW: Early binding, dann funzt intellisens
21.11.2016 20:20:01
ransi
Hallo BArbara,
Sorry,
Kommt davon wenn man nicht sorgfältig testet.
So gehts:
Sub machs()
Dim FSO As Scripting.FileSystemObject
Dim objFolder As Folder
Set FSO = New Scripting.FileSystemObject
Set objFolder = FSO.GetFolder("C:/Temp")
End Sub

Anzeige
AW: Early binding, dann funzt intellisens
21.11.2016 22:57:09
Barbara
Danke, das funktioniert.
Vielen Dank, ransi.
Noch eine Frage:
Ist FileCopy eine Excel-VBA-Funktion?
Ist einfacher, weil ich ohne dieses scripting auskomme.
Gibt es vielleicht eine Excel-VBA-Funktion, mit der Ordner kopiert werden können?
LG, B.
FileCopy, CopyFolder, VisualBasic.dll...
22.11.2016 07:42:28
Case
Hallio Barbara, :-)
... "FileCopy" kommt aus der "Visual Basic Runtime Library" und ist in der "VisualBasic.dll" enthalten. Kommt z. B. durch jede ".NET" Installation auf den Windows PC. ;-)
FileSystem.FileCopy-Methode: (String, String)...
Ordner kopieren kannst Du z. B: mit "Shell" und "XCOPY", oder mit "API". Natürlich auch mit dem "FileSystemObject". Da ist es dann ein Einzeiler: ;-)
CreateObject("Scripting.FileSystemObject").CopyFolder "C:\Temp\temp-Dateien", "C:\Temp\Save"
Der Zielordner muss nicht vorhanden sein: ;-)
CopyFolder-Methode...
Servus
Case

Anzeige
AW: FileCopy, CopyFolder, VisualBasic.dll...
22.11.2016 22:06:16
Barbara
Hallo case,
danke für die aufschlussreiche Info.
Auch der Link am Schluss "Servus" birgt einiges Interessantes, hat bereits ein Lesezeichen bekommen. Das nächste Wochenende ist gerettet.
LG, B.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Dateien und Ordner in Excel VBA kopieren


Schritt-für-Schritt-Anleitung

Um Dateien oder Ordner in Excel VBA zu kopieren, kannst du die FileSystemObject-Klasse verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Verweis hinzufügen: Gehe zu Extras > Verweise und aktiviere die Microsoft Scripting Runtime Bibliothek. Dadurch erhältst du IntelliSense für FileSystemObject.

  2. VBA-Code schreiben: Füge den folgenden Code in ein Modul ein:

    Sub DateienKopieren()
       Dim fso As Scripting.FileSystemObject
       Set fso = New Scripting.FileSystemObject
    
       ' Datei kopieren
       fso.CopyFile "C:\Pfad\Zur\Datei.txt", "C:\Pfad\Zur\Ziel\Datei.txt"
    
       ' Ordner kopieren
       fso.CopyFolder "C:\Pfad\Zum\Ordner", "C:\Pfad\Zur\Ziel\Ordner"
    End Sub
  3. Anpassen der Pfade: Ersetze die Pfade mit den tatsächlichen Pfaden deiner Dateien und Ordner.

  4. Makro ausführen: Starte das Makro über das VBA-Interface oder binde es in ein Excel-Arbeitsblatt ein.


Häufige Fehler und Lösungen

  • Fehler: "Pfad nicht gefunden": Überprüfe, ob der angegebene Pfad korrekt ist und die Datei oder der Ordner existiert.

  • Fehler: "Zielordner existiert bereits": Stelle sicher, dass der Zielordner nicht bereits vorhanden ist, wenn du fso.CopyFolder verwendest. Du kannst fso.FolderExists nutzen, um dies zu prüfen.

  • Fehler beim Zugriff auf die Datei: Überprüfe die Berechtigungen der Datei oder des Ordners, um sicherzustellen, dass du die benötigten Zugriffsrechte hast.


Alternative Methoden

Wenn du keine Microsoft Scripting Runtime verwenden möchtest, kannst du auch die FileCopy-Funktion verwenden:

Sub DateiKopierenMitFileCopy()
    FileCopy "C:\Pfad\Zur\Datei.txt", "C:\Pfad\Zur\Ziel\Datei.txt"
End Sub

Für das Kopieren von Ordnern kannst du die Shell-Befehle oder XCOPY verwenden:

Sub OrdnerKopierenMitShell()
    Shell "xcopy C:\Pfad\Zum\Ordner C:\Pfad\Zur\Ziel\Ordner /E /I", vbNormalFocus
End Sub

Praktische Beispiele

  1. Einzelne Datei kopieren:

    fso.CopyFile "C:\Documents\Beispiel.txt", "C:\Backup\Beispiel.txt"
  2. Ordner kopieren:

    fso.CopyFolder "C:\Projekte", "C:\Backup\Projekte"
  3. Vorhandensein eines Ordners überprüfen:

    If Not fso.FolderExists("C:\Backup\Projekte") Then
       fso.CopyFolder "C:\Projekte", "C:\Backup\Projekte"
    End If

Tipps für Profis

  • Fehlerbehandlung: Implementiere On Error-Anweisungen, um Fehler beim Kopieren zu behandeln und um zu vermeiden, dass das Makro bei einem Fehler abstürzt.

  • Leistungsoptimierung: Bei großen Datenmengen kann es hilfreich sein, die Kopieroperation in einem Hintergrundprozess auszuführen, um das Excel-Interface nicht zu blockieren.

  • Verwendung von Variablen: Nutze Variablen, um die Quell- und Zielpfade zu speichern. So wird der Code lesbarer und leichter wartbar.


FAQ: Häufige Fragen

1. Frage
Kann ich fso.copyfile in Access VBA verwenden?
Ja, die FileSystemObject-Klasse ist auch in Access VBA verfügbar. Der Code bleibt weitgehend der gleiche.

2. Frage
Was ist der Unterschied zwischen FileCopy und fso.copyfile?
FileCopy ist eine einfache Funktion, die für das Kopieren von Dateien verwendet wird, während fso.copyfile mehr Flexibilität bietet, wie etwa das Kopieren von Ordnern oder das Überprüfen von Pfaden.

3. Frage
Wie kann ich überprüfen, ob ein Ordner leer ist?
Du kannst die Methode Files des Folder-Objekts verwenden, um zu überprüfen, ob der Ordner Dateien enthält:

If objFolder.Files.Count = 0 Then
    MsgBox "Der Ordner ist leer."
End If

4. Frage
Kann ich die Scripting-Bibliothek in Excel Online verwenden?
Nein, die Scripting-Bibliothek ist nicht in Excel Online verfügbar. Du kannst nur in der Desktop-Version von Excel darauf zugreifen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige