Gostaria de percorrer os arquivos de um diretório usando vba no Excel 2010.
No loop, precisarei de:
- o nome do arquivo e
- a data em que o arquivo foi formatado.
Eu codifiquei o seguinte, que funciona bem se a pasta não tiver mais de 50 arquivos, caso contrário, é ridiculamente lenta (eu preciso que ela trabalhe com pastas com> 10000 arquivos). O único problema desse código é que a operação para procurar file.name
leva muito tempo.
Código que funciona, mas é muito lento (15 segundos por 100 arquivos):
Sub LoopThroughFiles()
Dim MyObj As Object, MySource As Object, file As Variant
Set MySource = MyObj.GetFolder("c:\testfolder\")
For Each file In MySource.Files
If InStr(file.name, "test") > 0 Then
MsgBox "found"
Exit Sub
End If
Next file
End Sub
Problema resolvido:
- Meu problema foi resolvido com a solução abaixo usando
Dir
de uma forma particular (20 segundos para 15000 arquivos) e para verificar o carimbo de tempo usando o comandoFileDateTime
. - Levando em conta outra resposta abaixo dos 20 segundos, é reduzido para menos de 1 segundo.
code
Set MyObj = New FileSystemObjectObject
.Respostas:
Aqui está minha interpretação como uma função:
fonte
Dir
utiliza curingas para que você possa fazer uma grande diferença adicionando o filtrotest
antecipadamente e evitando testar cada arquivofonte
Dir parece ser muito rápido.
fonte
FileDateTime
meu problema está resolvido.not
no entantotraverse the whole directory tree
. Caso seja necessário: analystcave.com/vba-dir-function-how-to-traverse-directories/…A função Dir é o caminho a seguir, mas o problema é que você não pode usar a
Dir
função recursivamente , conforme indicado aqui, na parte inferior .A maneira como lidei com isso é usar a
Dir
função para obter todas as subpastas da pasta de destino e carregá-las em uma matriz, depois passar a matriz para uma função que se repita.Aqui está uma aula que escrevi que realiza isso, que inclui a capacidade de procurar filtros. ( Você terá que perdoar a notação húngara, isso foi escrito quando havia toda a raiva. )
fonte
Dir
A função perde o foco facilmente quando eu manuseio e processo arquivos de outras pastas.Eu obtive melhores resultados com o componente
FileSystemObject
.Exemplo completo é dado aqui:
http://www.xl-central.com/list-files-fso.html
Não se esqueça de definir uma referência no Editor do Visual Basic para Microsoft Scripting Runtime (usando Ferramentas> Referências)
De uma chance!
fonte
Tente este. ( LINK )
fonte