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

Forumthread: fso.MoveFile mit Fehler "Datei nicht gefunden".

fso.MoveFile mit Fehler "Datei nicht gefunden".
06.05.2016 20:00:41
Matthias
Hallo zusammen
Ich verschiebe in einem Ordner mit zig Tausend Dateien, eine nach der anderen von A nach B. Da ich nach dem Verschieben noch einige Änderungen per Makro durchführe, dauert das ewig für so viele Files. Ich möchte also mein Makro mehrmals auf ein paar verschiedenen PC's starten.
Was mache ich allerdings, wenn das eine Makro eine der Dateien verschieben will die schon weg ist? :)
Kann man den fso.MoveFile Befehl ohne Fehlermeldung ausführen oder den Fehler umgehen und einfach weitermachen?
Script sieht so aus:
Sub MarkoVerschieben()
Dim fso As Object
Dim pStr As String
Application.DisplayAlerts = False
Start:
pStr = "XX"
Ablagepfad = "XX\OK\"
For i = 1 To 20000
myFile = Dir(pStr & Application.PathSeparator & "*.xls?")
AktuellerDateiName = pStr & Application.PathSeparator & myFile
DateiNameNeuerOrt = Ablagepfad & Application.PathSeparator & myFile
If myFile = "" Then Exit Sub
On Error GoTo Start
Set fso = CreateObject("Scripting.FileSystemObject")
fso.MoveFile AktuellerDateiName, Ablagepfad
On Error GoTo Start
Workbooks.Open Filename:=DateiNameNeuerOrt
.... Überarbeitung der Files ....
ActiveWorkbook.Save
ActiveWorkbook.Close
Next
End Sub
Vielen Dank für eure Hilfe :)
Matthias

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: fso.MoveFile mit Fehler "Datei nicht gefunden".
07.05.2016 11:08:54
Nepumuk
Hallo,
teste mal:
Public Sub MarkoVerschieben()
    
    Dim fso As Object, objWorkbook As Workbook
    Dim pStr As String, Ablagepfad As String
    Dim DateiNameNeuerOrt As String, myFile As String
    Dim lngIndex As Long
    
    pStr = "XX\"
    Ablagepfad = "XX\OK\"
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    myFile = Dir$(pStr & "*.xls*")
    
    Do Until myFile = vbNullString
        
        DateiNameNeuerOrt = Ablagepfad & myFile
        
        Call fso.MoveFile(pStr & myFile, Ablagepfad)
        
        
        Set objWorkbook = Workbooks.Open(Filename:=DateiNameNeuerOrt)
        
        '.... Überarbeitung der Files ....
        
        Call objWorkbook.Close(SaveChanges:=True)
        
        myFile = Dir$
        
    Loop
    
    Set fso = Nothing
End Sub

Gruß
Nepumuk

Anzeige
AW: fso.MoveFile mit Fehler "Datei nicht gefunden".
07.05.2016 11:38:27
Nepumuk
Hallo nochmal,
besser so:
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
        
        Call fso.MoveFile(pStr & myFile, Ablagepfad)
        
        Set objWorkbook = Workbooks.Open(Filename:=DateiNameNeuerOrt)
        
        '.... Überarbeitung der Files ....
        
        Call objWorkbook.Close(SaveChanges:=True)
        
        Set objWorkbook = Nothing
        
        myFile = Dir$
        
    Loop
    
    Set fso = Nothing
End Sub

Gruß
Nepumuk

Anzeige
AW: fso.MoveFile mit Fehler "Datei nicht gefunden".
08.05.2016 09:51:34
Matthias
Hey Nepumuk. Vielen Dank für den Input. Es geht schon schneller so :)
Zwei Scripts gleichzeitig laufen lassen kann ich aber noch immer nicht ....

AW: fso.MoveFile mit Fehler "Datei nicht gefunden".
08.05.2016 10:03:09
Nepumuk
Hallo,
die werden sich immer ins Gehege kommen wenn du das auf mehreren Rechnern startest. Was passiert den genau in: .... Überarbeitung der Files .... eventuell lässt sich das ja beschleunigen.
Gruß
Nepumuk

Anzeige
AW: fso.MoveFile mit Fehler "Datei nicht gefunden".
08.05.2016 14:44:03
Matthias
Hi Nepumuk
Nur das da :)
Columns("D:D").Select
Selection.Delete Shift:=xlToLeft
Columns("E:E").Select
Selection.Insert Shift:=xlToRight
Selection.Insert Shift:=xlToRight
Selection.Insert Shift:=xlToRight
Columns("M:M").Select
Selection.Delete Shift:=xlToLeft
Columns("N:N").Select
Selection.Delete Shift:=xlToLeft
Range("N1").Select
Das Problem ist eher dass auf meinem (langsamen) Geschäfts PC nur etwa 30 Excel-Datein pro Minute verarbeitet werden ;)
Gruss Matthias

Anzeige
AW: fso.MoveFile mit Fehler "Datei nicht gefunden".
08.05.2016 19:25:59
Nepumuk
Hallo,
ich würde an deiner Stelle die Dateien auf verschiedene Ordner verteilen und von dort aus verarbeiten.
Gruß
Nepumuk
;
Anzeige
Anzeige

Infobox / Tutorial

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:

  1. 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).
  2. 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
  3. Ersetze XX mit dem tatsächlichen Pfad Deiner Dateien.

  4. 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.

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