AW: Fehler bei Schleife
24.03.2016 12:28:28
Steve
Hallo Steffen,
es tut mir zwar schrecklich leid, aber wie sollen wir deinen Code vernünftig testen, wenn du uns nur einen Ausschnitt davon gibst. Eventuell liegt der Fehler ja auch in den Werten welche sich hinter den Variablen verstecken.
Zudem ist es recht schwer den Code zu verstehen, wenn die Variablennamen nur für den Eingeweihten Sinn ergeben und du immer wiederkehrende Pfade jedes Mal wieder zusammenstückelst. Speichere sie doch in anderen Variablen. Du musst echt an deiner Übersichtlichkeit arbeiten.
Daher habe ich mir kaum die Mühe gemacht nach deinem Fehler zu suchen sondern präsentiere dir hier meine Lösung für das Problem:
Dim hdlnr As String, Dateien As String, apath As String
Dim oFolder As Object, oFile As Object
On Error Resume Next
Set oFolder = CreateObject("scripting.filesystemobject"). _
GetFolder(ThisWorkbook.Path & "\betriebe_blv\" & hdlnr & "\Monatsabschluss")
If Err.Number > 0 Then
MsgBox Err.Description, vbCritical, "Warnung"
Exit Sub
End If
On Error GoTo 0
If Dir(apath & hdlnr & "\Monatsabschluss", vbDirectory) = "" Then _
MkDir apath & hdlnr & "\Monatsabschluss"
On Error Resume Next
For Each oFile In oFolder.Files
FileCopy oFile.Path, apath & hdlnr & "\Monatsabschluss\" & oFile.Name
If Err.Number > 0 Then
MsgBox Err.Description & Chr(10) & Chr(10) & oFile.Path, vbCritical, "Warnung"
Debug.Print Err.Description
Debug.Print oFile.Path
Err.Clear
End If
Next
On Error GoTo 0
End Sub
Die Prüfung ob der Ordner vorhanden ist oder erstellt werden muss kannst du aus der Schleife rauspacken, solang du an den Variablen für den Ordnerpfad nix änderst. Unnötige Mehrfachprüfung.
Wichtig für dich ist hier die CreateObject-Funktion für den Ordner und die anschließende Schleife. Ansonsten habe ich einen anderen Errorhandler eingebaut, statt "Exit Sub" kannst du natürlich auch an anderer Stelle fortfahren.
Im Direktfenster kannst du nachvollziehen welche Dateien nicht kopiert wurden, z.B. wegen fehlender Zugriffsrechte. Vorhandene Dateien werden ansonsten ohne Rückfrage überschrieben.
lg Steve