Fehlerbehebung bei fso.MoveFile in Excel VBA
Schritt-für-Schritt-Anleitung
Um das fso.MoveFile
-Problem zu lösen, kannst Du folgendermaßen vorgehen:
-
Erstelle ein neues Excel VBA Modul:
- Öffne Excel und drücke
ALT + F11
, um den VBA-Editor zu starten.
- Füge ein neues Modul hinzu (
Einfügen > Modul
).
-
Füge den folgenden Code ein:
Public Sub MarkoVerschieben()
Dim fso As Object, objWorkbook As Workbook
Dim pStr As String, Ablagepfad As String
Dim DateiNameNeuerOrt As String, myFile As String
pStr = "XX\"
Ablagepfad = "XX\OK\"
Set fso = CreateObject("Scripting.FileSystemObject")
myFile = Dir$(pStr & "*.xls*")
Do Until myFile = vbNullString
DateiNameNeuerOrt = Ablagepfad & myFile
On Error Resume Next
fso.MoveFile pStr & myFile, Ablagepfad
If Err.Number = 0 Then
Set objWorkbook = Workbooks.Open(Filename:=DateiNameNeuerOrt)
'.... Überarbeitung der Files ....
Call objWorkbook.Close(SaveChanges:=True)
End If
myFile = Dir$
Loop
Set fso = Nothing
End Sub
-
Ersetze XX
mit dem tatsächlichen Pfad Deiner Dateien.
-
Führe das Makro aus:
- Gehe zurück zu Excel, drücke
ALT + F8
, wähle MarkoVerschieben
und klicke auf Ausführen
.
Häufige Fehler und Lösungen
-
Fehler: "Datei nicht gefunden"
- Lösung: Stelle sicher, dass die Datei existiert, bevor Du
fso.MoveFile
ausführst. Nutze On Error Resume Next
, um Fehler zu ignorieren und die Schleife fortzusetzen.
-
Fehler: Zugriffsverletzung
- Lösung: Überprüfe die Berechtigungen des Ordners, in den Du die Dateien verschieben möchtest.
-
Fehler: Makro läuft zu langsam
- Lösung: Reduziere die Anzahl der geöffneten Dateien oder verteile die Dateien auf verschiedene Ordner.
Alternative Methoden
Wenn Du mit fso.MoveFile
nicht weiterkommst, kannst Du auch die FileCopy
-Methode in Kombination mit Kill
verwenden:
FileCopy pStr & myFile, Ablagepfad & myFile
Kill pStr & myFile
Diese Methode kopiert die Datei und löscht sie anschließend, wodurch Du das Verschieben der Datei auch ohne fso.movefile
erledigen kannst.
Praktische Beispiele
Beispiel 1: Dateien in einen neuen Ordner verschieben
Sub VerschiebeDateien()
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
fso.MoveFile "C:\Temp\*.xls*", "C:\Ziel\"
End Sub
Beispiel 2: Fehlerbehandlung in einer Schleife
Sub SicheresVerschieben()
Dim myFile As String
myFile = Dir("C:\Temp\*.xls*")
Do While myFile <> ""
On Error Resume Next
fso.MoveFile "C:\Temp\" & myFile, "C:\Ziel\"
If Err.Number <> 0 Then
Debug.Print "Fehler beim Verschieben: " & myFile
Err.Clear
End If
myFile = Dir
Loop
End Sub
Tipps für Profis
-
Verwende Application.DisplayAlerts = False
: Dadurch vermeidest Du störende Warnmeldungen beim Verschieben von Dateien.
-
Optimiere die Schleife: Wenn Du viele Dateien hast, kann es hilfreich sein, die Dateien in Batches zu verarbeiten, um die Leistung zu steigern.
-
Verwende Logging: Nutze die Debug.Print
-Anweisung, um Informationen über den Status des Makros in das Direktfenster zu schreiben.
FAQ: Häufige Fragen
1. Was ist fso
in VBA?
fso
steht für FileSystemObject
, ein Objekt, das Dir erlaubt, auf das Dateisystem zuzugreifen und Dateien zu verwalten.
2. Wie kann ich die Geschwindigkeit beim Verschieben von Dateien erhöhen?
Verteile die Dateien auf verschiedene Ordner und führe mehrere Instanzen des Makros gleichzeitig aus, um die Verarbeitung zu beschleunigen.
3. Was passiert, wenn die Datei bereits verschoben wurde?
Wenn Du On Error Resume Next
verwendest, wird das Makro fortgesetzt, ohne einen Fehler zu erzeugen.