Следующий код работает примерно в 19 раз быстрее, чем с помощью FileSystemObject. На моей машине поиск 4000 файлов в трех разных каталогах занял 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 при необходимости.)