Поиск файловой системы для пути к файлу с использованием VBA - PullRequest
0 голосов
/ 05 октября 2010

Я ищу способ поиска в определенной папке подпапки, содержащей определенную строку. Ниже я перечислил функцию, которую набрал на макушке головы, чтобы посмотреть, сработает ли она. Ну, это работает, но когда я говорю о поиске в 6000 папок на сетевом диске, это просто не достаточно быстро.

Я уверен, что есть лучший способ сделать это, но я не могу ничего найти в Google.

  1. Есть ли объект, позволяющий использовать окна, встроенные в возможности поиска и индексации файловой системы?

  2. В качестве альтернативы, есть ли у кого-то способ оптимизировать мой код? Основным узким местом является использование instr.

Вот код:

Function findPath(strId As String) As String
checkObj
Dim strBase As String
strBase = opt.photoBasePath

Dim fs As Object
Set fs = CreateObject("Scripting.FileSystemObject")

Dim baseFolder As Object
Set baseFolder = fs.getfolder(strBase)

Dim folder As Object

For Each folder In baseFolder.subfolders
    If InStr(1, folder.name, strId) > 0 Then
        findPath = strBase & "\" & folder.name
        Exit Function
    End If
Next folder


End Function

P.S. Я уверен, что кто-то предложит изменить структуру моей папки, чтобы я мог программно предсказать путь, но по разным причинам это невозможно в моем случае.

Ответы [ 2 ]

2 голосов
/ 05 октября 2010

Вы можете использовать FindFirstFile Win32 API, который позволяет вам искать файлы или каталоги, соответствующие указанному имени.Кроме того, вы также можете использовать функцию FindFirstFileEx вместе с параметром FINDEX_SEARCH_OPS FindExSearchLimitToDirectories, который будет ограничивать поиск файлом, который соответствует указанному имени и также является каталогом(если файловая система поддерживает фильтрацию каталогов).Для получения дополнительной информации об использовании этих функций из VB / VBA см. Следующее:

http://www.xtremevbtalk.com/showpost.php?p=1157418&postcount=4

http://support.microsoft.com/kb/185476

http://www.ask -4it.com /как в использовании-FindFirstFile-win32-апи-из-визуальному-основного кода-2-ca.html

0 голосов
/ 05 октября 2010

Подумайте о том, чтобы разделить обход папок и найти ваш ключ.Вместо теста instr сохраните имена папок в таблице, а затем используйте запрос к таблице, чтобы найти свою цель.Это может быть медленнее, но поиск должен быть быстрее.

...