2015-06-30 2 views
0

То, что я на данный момент:VBA открыть файлы в порядке очереди в имени файла?

Sub Merge()Dim bookList As Workbook 
Dim mergeObj As Object, dirObj As Object, filesObj As Object, everyObj As Object 
    Application.ScreenUpdating = False 
    Set mergeObj = CreateObject("Scripting.FileSystemObject") 

    'change folder path of excel files here 
    Set dirObj = mergeObj.Getfolder("G:\loc\loc\loc\loc\loc\loc\loc") 
    Set filesObj = dirObj.Files 
    For Each everyObj In filesObj 
     Set bookList = Workbooks.Open(everyObj) 

     Range("A4:I" & Range("A65536").End(xlUp).Row).Copy 
     ThisWorkbook.Worksheets(1).Activate 

     Range("B65536").End(xlUp).Offset(0, 0).PasteSpecial 
     Application.CutCopyMode = False 
     bookList.Close 
    Next 
End Sub 

Я хочу изменить это так, что он открывает и копии из файлов в хронологическом порядке (который входит в там имя файла)

например, было бы открыть и копия в порядке, как показано ниже:

"20150601 - Daily Update.xls"
"20150602 - Daily Update.xls"
"20150603 - Daily Update.xls"

+0

посмотри здесь: http://stackoverflow.com/questions/16895525/order-of-files-collection-in-filesystemobject Решает ли это? – LocEngineer

+0

вывести имена файлов на временный лист, заказать их и прочитать их обратно в цикл и открыть их во втором цикле? – 99moorem

ответ

0

Я слил сортировочное решение пользователя @Papasmile ссылается на комментарии пользователя @LocEngineer с вашим кодом (все кредиты на них):

Sub Merge() 
Dim bookList As Workbook 
Dim mergeObj As Object, dirObj As Object 
Dim filesObj As Object, everyObj As Object, outputLines As Object 
Dim outputLine 
    Application.ScreenUpdating = False 
    Set mergeObj = CreateObject("Scripting.FileSystemObject") 
    Set outputLines = CreateObject("System.Collections.ArrayList") 

    'change folder path of excel files here 
    Set dirObj = mergeObj.Getfolder("G:\loc\loc\loc\loc\loc\loc\loc") 
    Set filesObj = dirObj.Files 
    For Each everyObj In filesObj 
     outputLines.Add everyObj.Name 
    Next 
    outputLines.Sort 

    For Each outputLine In outputLines 
     Set bookList = Workbooks.Open(outputLine) 

     Range("A4:I" & Range("A65536").End(xlUp).Row).Copy 
     ThisWorkbook.Worksheets(1).Activate 

     Range("B65536").End(xlUp).Offset(0, 0).PasteSpecial 
     Application.CutCopyMode = False 
     bookList.Close 
    Next 
End Sub