2016-03-10 3 views
0

Итак, я пишу код в VBA, который открывает все файлы в документе и копирует и вставляет информацию из каждого документа. Код установлен, чтобы открыть каждый документ, но сам. Моя дилемма заключается в том, что я хочу, чтобы код открывал когда-либо документ, который был изменен после последнего дня, когда основной файл был изменен. В принципе, я хочу сравнить две даты с одной датой, оставаясь одной и той же, а другая меняется после каждого цикла (новый документ в каждом цикле). Мой код ниже, и любая помощь или предложение будут высоко оценены. Благодаря!Сравнение даты файла, измененного в VBA

Sub LoopThroughDirectory() 
Dim MyFile As String 
Dim erow 
Dim Filepath As String 
Dim DateMaster As Date 
Dim DateReflections As Date 

Filepath = "Path of folder where all the documents are" 
MyFile = Dir(Filepath) 
DateReflections = FileDateTime(Filepath) 
DateMaster = FileDateTime("Filepath of master document I'm comparing to") 

Do While Len(MyFile) > 0 
If MyFile = "zmasterfile.xlsm" Then 
Exit Sub 
If DateReflections < DateMaster Then 
Exit Sub 
End If 

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 

Loop 
End Sub 

ответ

1

Вы не должны выходить из подпрограммы в инструкции if. Вы могли бы рассмотреть вопрос об изменении вас, если заявление на что-то, как показано ниже:

Sub LoopThroughDirectory() 
Dim MyFile As String 
Dim erow 
Dim Filepath As String 
Dim DateMaster As Date 
Dim DateReflections As Date 

Filepath = "Path of folder where all the documents are" 
MyFile = Dir(Filepath) 
DateReflections = FileDateTime(Filepath) 
DateMaster = FileDateTime("Filepath of master document I'm comparing to") 

Do While Len(MyFile) > 0 
    DateReflections = FileDateTime(Filepath) 
    If MyFile <> "zmasterfile.xlsm" and DateReflections > DateMaster 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

Хорошее предложение реорганизовать –

1

Вам просто нужно сбросить DateReflections в вашем цикле, используя MyFile построить путь к файлу. Смотри ниже.

If MyFile = "zmasterfile.xlsm" Then 
Exit Sub 

DateReflections = FileDateTime(Filepath & "\" & MyFile) 
If DateReflections < DateMaster Then 
Exit Sub 
End If 

Как и в сторону, если вы хотите просто пропустить файл и продолжить обработку, а не выход из суб полностью, заменить Exit Sub с с Continue Do

+0

Спасибо за помощь! Datereflections работает, но продолжать делать это не так, и две даты документа не сравниваются правильно. Любая мысль об этом? Благодаря! –

Смежные вопросы