2015-06-22 2 views
1

Я пытаюсь открыть все файлы с именами, заканчивающимися на ToDo.xlsx, выполнив цикл, который проходит через все подпапки.Открыть все файлы с частичным именем во вложенных папках - VBA

Я нашел этот цикл в другом посте в StackOverflow, но это занимает слишком много времени, когда есть много файлов (~ 35k в моем случае):

Public Sub NonRecursiveMethod() 
    Dim fso, oFolder, oSubfolder, oFile, queue As Collection 

    Set fso = CreateObject("Scripting.FileSystemObject") 
    Set queue = New Collection 
    queue.Add fso.GetFolder("your folder path variable") 'obviously replace 

    Do While queue.Count > 0 
     Set oFolder = queue(1) 
     queue.Remove 1 'dequeue 
     '...insert any folder processing code here... 
     For Each oSubfolder In oFolder.SubFolders 
      queue.Add oSubfolder 'enqueue 
     Next oSubfolder 
     For Each oFile In oFolder.Files 
      '...insert any file processing code here... 
     Next oFile 
    Loop 
End Sub 

Мой код обработка:

If InStr(oFile.Name,"ToDo"= <> 0 Then Workbooks.Open Filename:=oSubfolder & oFile 

Есть ли способ установить это условие в цикле for, чтобы минимизировать время обработки?

Спасибо

+0

это открытие файлов с «ToDo», который принимает время, или рылась все подпапки? –

+0

Поиск всех файлов во всех подпапках –

+0

, так как возникает вопрос «как повысить производительность при циклировании по всем подпапкам»? не знаете, как сравнивается эффективность рекурсивного метода с этим. Кто-нибудь знает? –

ответ

0

Вместо петли For each, попробуйте, если следующий обкорнать быстрее:

filename = Dir(oFolder.Name & "\*ToDo.xlsx") 
While (filename <> "") 
    ' processing... Full name is oFolder.Name & "\" & filename 
    filename = Dir 
Wend 
Смежные вопросы