me gustaría bucle a través de los archivos de un directorio utilizando vba en Excel 2010.¿Pasa los archivos en una carpeta usando VBA?
En el bucle, necesitaré
- el nombre de archivo y
- la fecha en que el archivo fue formateado.
He codificado lo siguiente que funciona bien si la carpeta no tiene más de 50 archivos, de lo contrario es ridículamente lenta (lo necesito para trabajar con carpetas con> 10000 archivos). El único problema de este código es que la operación para buscar file.name
toma mucho tiempo.
El código que funciona, pero es waaaaaay demasiado lento (15 segundos por cada 100 archivos):
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 resuelto:
- Mi problema ha sido resuelto por la solución a continuación usando
Dir
de una manera particular (20 segundos para 15000 archivos) y para verificar la marca de tiempo utilizando el comandoFileDateTime
. - Teniendo en cuenta otra respuesta de debajo, los 20 segundos se reducen a menos de 1 segundo.
Su tiempo inicial parece lento para VBA. ¿Estás usando Application.ScreenUpdating = false? –
Parece que falta el 'código' Set MyObj = New FileSystemObject – baldmosher
Me parece un poco triste que las personas llamen rápidamente a FSO" lento ", pero nadie menciona la penalización del rendimiento que podría evitar simplemente utilizando el enlace anticipado en lugar de tarde Llamadas enlazadas contra 'Object'. –