2016-04-05 5 views
1

Also habe ich einen Code geschrieben, der durch einen Ordner geht Dokumente öffnet, kopiert Informationen und fügt in einer Master-Datei irgendwo anders. Das Problem, das ich habe, ist, dass ich eine if, else-Anweisung hinzufügen möchte, um das Datum zu vergleichen, an dem die Master-Datei zuletzt geändert wurde, mit den Dokumenten in dem anderen Ordner. Wenn es die if-Anweisung nicht erfüllt, möchte ich, dass die Schleife dieses Dokument überspringt und das nächste Dokument weiter vergleicht. Nicht sicher, wie man damit fortfahren kann, der Code kann unten gesehen werden.VBA: Wie If/Else-Anweisung in einer Schleife zu tun, um fortzufahren

Sub Datecheck() 
    Dim MyFile As String 
    Dim erow 
    Dim Filepath As String 
    Dim otherfiledate As Date 
    Dim zmasterdate As Date 
    Filepath = "folder of where all files are located" 
    MyFile = Dir(Filepath) 
    zmasterdate = FileDateTime("location of zmasterdate") 

    Do While Len(MyFile) > 0 
     otherfiledate = FileDateTime(Filepath & "\" & MyFile) 
     If otherfiledate > zmasterdate Then 

      Workbooks.Open (Filepath & MyFile) 
      Range("B4:N4").Copy 
      ActiveWorkbook.Close 

      erow = Sheet1.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Row 
      ActiveSheet.Paste Destination:=Worksheets("Reflections").Range(Cells(erow, 2), Cells(erow, 14)) 

      MyFile = Dir 

     Else 

      End Sub 

     End If 
    Loop 
End Sub 
+0

Seite beachten, können Sie keine Unter in der Mitte des Codes beenden, müssen Sie 'Ausfahrt sub' statt. 'End Sub' bezeichnet das Ende der Subroutine –

+0

einige nützliche Hinweise: 1) da' otherfiledate' nur einmal verwendet wird, kann man es nicht deklarieren und initialisieren und einfach mit 'if FileDateTime (Filepath & "\" & MyFile)> gehen zmasterdate'. 2) 'ActiveSheet.Paste Ziel: = Arbeitsblätter (" Reflexionen "). Bereich (Zellen (EROW, 2), Zellen (EROW, 14))' könnte einfach 'ActiveSheet.Paste Ziel: = Arbeitsblätter (" Reflexionen ") sein. Zellen (EROW, 2) 'und Excel füllen so viele Zellen wie der kopierte Bereich. 3) sollte 'Sheet1'' Worksheets ("Reflections") '' sein, dann könntest du mit einem 'With Sheet1 .. End With' Muster 4) wo Sheet1 definiert werden? – user3598756

Antwort

1

Sie tun bereits die Überprüfung, so dass Sie keine else Klausel brauchen. Bewegen Sie einfach Ihre MyFile = Dir bis zum Ende der Schleife

Sub Datecheck() 
Dim MyFile As String 
Dim erow 
Dim Filepath As String 
Dim otherfiledate As Date 
Dim zmasterdate As Date 
Filepath = "folder of where all files are located" 
MyFile = Dir(Filepath) 
zmasterdate = FileDateTime("location of zmasterdate") 

Do While Len(MyFile) > 0 
    otherfiledate = FileDateTime(Filepath & "\" & MyFile) 
    If otherfiledate > zmasterdate Then 

     Workbooks.Open (Filepath & MyFile) 
     Range("B4:N4").Copy 
     ActiveWorkbook.Close 

     erow = Sheet1.Cells(Rows.Count, 2).End(xlUp).Offset(1, 0).Row 
     ActiveSheet.Paste Destination:=Worksheets("Reflections").Range(Cells(erow, 2), Cells(erow, 14)) 

    End If 
    MyFile = Dir 
Loop 
End Sub 
+0

Dadurch stoppt der Code, wenn er andere Dateien> zmasterdate findet. Wie sage ich, dass ich fortfahren und jede Datei im Ordner durchgehen soll? –

+0

Wenn es stoppt, dann gibt es ein anderes Problem und ich vermute, es hat mit dem FilePath zu tun. Dieser Codeabschnitt durchläuft alle Dateien in einem Verzeichnis. FilePath sollte eine Endung \ haben. Wie es jetzt ist, ich rate es nicht, da Sie ein \ in der filedatetime Prüfung hinzufügen. – Sorceri

+0

Eigentlich hast du recht. Es hat funktioniert, danke! –