Я хотел бы перебрать файлы каталога с помощью УВА в Excel 2010
В цикле мне понадобятся:
- имя файла и
- дата, когда файл был отформатирован.
Я написал следующее, что работает нормально, если в папке не более 50 файлов, в противном случае это смехотворно медленно (мне нужно для работы с папками с> 10000 файлов). Единственная проблема этого кода в том, что операция поиска file.name
занимает очень много времени.
Код, который работает, но работает слишком медленно (15 секунд на 100 файлов):
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
Задача решена:
- Моя проблема была решена с помощью приведенного ниже решения с использованием
Dir
определенного способа (20 секунд для 15000 файлов) и для проверки отметки времени с помощью командыFileDateTime
. - С учетом другого ответа снизу 20 секунд сокращаются до менее 1 секунды.
code
Set MyObj = New FileSystemObjectObject
.Ответы:
Вот моя интерпретация как функция:
источник
Dir
использует подстановочные знаки, чтобы вы могли иметь большое значение, добавив фильтрtest
заранее и избегая тестирования каждого файлаисточник
Дир, кажется, очень быстро.
источник
FileDateTime
моя проблема решена.not
однакоtraverse the whole directory tree
. В случае необходимости: analystcave.com/vba-dir-function-how-to-traverse-directories/…Функция Dir - это путь, но проблема в том, что вы не можете использовать
Dir
функцию рекурсивно , как указано здесь, в нижней части .Способ, которым я это обработал, состоит в том, чтобы использовать
Dir
функцию, чтобы получить все подпапки для целевой папки и загрузить их в массив, а затем передать массив в функцию, которая повторяется.Вот класс, который я написал, который выполняет это, он включает в себя возможность поиска фильтров. ( Вам придется простить Венгерскую нотацию, это было написано, когда она была в ярости. )
источник
Dir
функция легко теряет фокус при обработке и обработке файлов из других папок.Я получил лучшие результаты с компонентом
FileSystemObject
.Полный пример приведен здесь:
http://www.xl-central.com/list-files-fso.html
Не забудьте установить ссылку в редакторе Visual Basic на Microsoft Scripting Runtime (с помощью Сервис> Ссылки)
Попробуйте!
источник
Попробуй это. ( ССЫЛКА )
источник