Me gustaría recorrer los archivos de un directorio usando vba en Excel 2010.
En el bucle, necesitaré:
- el nombre del archivo y
- la fecha en que se formateó el archivo.
He codificado lo siguiente, que funciona bien si la carpeta no tiene más de 50 archivos, de lo contrario es ridículamente lento (necesito que funcione con carpetas con> 10000 archivos). El único problema de este código es que la operación de búsqueda file.name
lleva mucho tiempo.
Código que funciona pero que es demasiado lento (15 segundos por 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:
- La solución a continuación solucionó mi problema utilizando
Dir
una forma particular (20 segundos para 15000 archivos) y para verificar la marca de tiempo utilizando el comandoFileDateTime
. - Teniendo en cuenta otra respuesta desde abajo, los 20 segundos se reducen a menos de 1 segundo.
code
Set MyObj = New FileSystemObjectObject
.Respuestas:
Aquí está mi interpretación como una función en su lugar:
fuente
Dir
toma comodines para que pueda hacer una gran diferencia al agregar el filtro portest
adelantado y evitar probar cada archivofuente
Dir parece ser muy rápido.
fuente
FileDateTime
mi problema está resuelto.not
sin embargotraverse the whole directory tree
. En caso de que sea necesario: analystcave.com/vba-dir-function-how-to-traverse-directories/...La función Dir es el camino a seguir, pero el problema es que no puede usar la
Dir
función de forma recursiva , como se indica aquí, hacia abajo .La forma en que manejé esto es usar la
Dir
función para obtener todas las subcarpetas para la carpeta de destino y cargarlas en una matriz, luego pasar la matriz a una función que se repite.Aquí hay una clase que escribí que logra esto, incluye la capacidad de buscar filtros. ( Tendrás que perdonar la notación húngara, esto se escribió cuando estaba de moda ) .
fuente
Dir
La función pierde el foco fácilmente cuando manejo y proceso archivos de otras carpetas.He obtenido mejores resultados con el componente
FileSystemObject
.El ejemplo completo se da aquí:
http://www.xl-central.com/list-files-fso.html
No olvide establecer una referencia en el Editor de Visual Basic para Microsoft Scripting Runtime (usando Herramientas> Referencias)
¡Darle una oportunidad!
fuente
Prueba este. ( ENLACE )
fuente