Как получить список всех файлов с расширением ESY в каталоге?
В VBA, как мне получить список всех файлов с определенным расширением в определенном каталоге?
Я не могу выполнить Application.FileSearch
, потому что я использую excel 2007
Ответы
Ответ 1
В ответ на ваш комментарий "так сколько раз я знаю, чтобы запустить его?", этот пример запускается до тех пор, пока он не отобразит все файлы, имена которых соответствуют strPattern. Измените константу strFolder.
Public Sub ListESY()
Const strFolder As String = "C:\SomeFolder\"
Const strPattern As String = "*.ESY"
Dim strFile As String
strFile = Dir(strFolder & strPattern, vbNormal)
Do While Len(strFile) > 0
Debug.Print strFile '<- view this in Immediate window; Ctrl+g will take you there
strFile = Dir
Loop
End Sub
Ответ 2
Dir ( "C:\yourPath\*. ESY", vbNormal)
Возвращает первый файл с расширением esy.
Каждый последующий вызов Dir() возвращает следующий.
Ответ 3
Альтернативный вариант: используйте библиотеку Microsoft Scripting Runtime (проверьте ее в Инструментах... Ссылки) для семейства объектов FileSystemObject. Что-то вроде следующего, возможно:
Public Function ESYFileCount(dir_path as String) as Long
Dim fil As File
With New FileSystemObject
With .GetFolder(dir_path)
For Each fil In .Files
If LCase(Right(fil.Name, 4)) = ".esy" Then
ESYFileCount = ESYFileCount + 1
End If
Next
End With
End With
End Function
Ответ 4
Следующий код работает примерно в 19 раз быстрее, чем при использовании FileSystemObject. На моей машине поиск 4000 файлов в трех разных drectories занял 1,57 секунды с помощью FileSystemObject, но только 0.08 секунд с помощью этого кода.
Public Function CountFilesWithGivenExtension( _
i_strFolderWithTerminalBackslant As String, _
i_strExtensionIncludingPeriod As String _
) As Long
If Len(Dir$(i_strFolderWithTerminalBackslant & "*" _
& i_strExtensionIncludingPeriod)) > 0 Then
CountFilesWithGivenExtension = 1
While Len(Dir$) > 0
CountFilesWithGivenExtension = _
CountFilesWithGivenExtension + 1
DoEvents
Wend
Else
CountFilesWithGivenExtension = 0
End If
End Function
Использование образца:
Debug.Print CountFilesWithGivenExtension("C:\", ".ex*")
( "DoEvents" не требуется, но позволяет использовать Pause/Break, если это необходимо.)