Vorrei un ciclo tra i file di una directory utilizzando vba in Excel 2010.Passa in rassegna i file in una cartella usando VBA?
Nel ciclo, ho bisogno
- il nome del file, e
- la data in cui è stato il file formattato.
Ho codificato il seguente che funziona bene se la cartella non ha più di 50 file, altrimenti è ridicolmente lento (ho bisogno di lavorare con cartelle con> 10000 file). L'unico problema di questo codice è che l'operazione di ricerca di file.name
richiede molto tempo.
codice che funziona, ma è waaaaaay troppo lenta (15 secondi per 100 file):
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 risolto:
- Il mio problema è stato risolto dal soluzione sotto usando
Dir
in un modo particolare (20 secondi per 15000 file) e per controllare il timestamp usando il comandoFileDateTime
. - Prendendo in considerazione un'altra risposta dal basso, i 20 secondi vengono ridotti a meno di 1 secondo.
L'ora iniziale sembra ancora lenta per VBA. Stai usando Application.ScreenUpdating = false? –
Sembra che manchi il 'codice' Set MyObj = New FileSystemObject – baldmosher
Trovo piuttosto triste che le persone chiamino rapidamente FSO" FSO ", ma nessuno menziona la penalizzazione delle prestazioni che si potrebbe evitare usando semplicemente l'associazione anticipata anziché quella tardiva- chiamate vincolate contro 'Object'. –