Application.filesearch в Excel 2007 с циклом

Я сделал несколько поисков, и у меня возникли проблемы с поиском правильного кода при использовании ныне несуществующего .filesearch - я изучил использование как Dir, так и FileSystemObject, но с не чем иным, как путаницей при использовании цикла после поиска ... Я надеюсь, что вы сможете помочь мне прийти к более легкому выводу!

Короче говоря, мой текущий код ищет в папке все файлы Excel и открывает первый, делает с ним то, что нужно, закрывает его и открывает следующий искомый файл. Заранее спасибо!

FilePath = "S:\My\File\Path"
FileSpec = ".xls"

Set FS = Application.FileSearch
    With FS
        .LookIn = FilePath
        .Filename = FileSpec
        .Execute
    End With

For b = 1 To FS.FoundFiles.Count
    StrFile = FS.FoundFiles(b)

Set mobjXL = New Excel.Application
With mobjXL

    .Visible = False

'REST OF CODE HERE

next b

person Ashencross    schedule 16.07.2013    source источник
comment
с какой проблемой вы столкнулись при использовании функции Dir(). Покажите код, который у вас есть, который будет легче вам помочь.   -  person Kazimierz Jawor    schedule 16.07.2013


Ответы (2)


Это должно указать вам правильное направление:

Sub Your_Sub()

Dim FSO as Object
Dim FSO_FOLDER AS Object
Dim FSO_FILE as Object
Dim FILE_PATH as String
Dim FILE_EXT as String

FILE_PATH = "S:\My\File\Path"
FILE_EXT = "xls"

''Create FileSystem Objects
Set FSO = CreateObject("Scripting.FileSystemObject")
Set FSO_FOLDER = FSO.GetFolder(FILE_PATH)

If FSO_FOLDER.Files.Count > 0 Then

    ''Loop through each File in Folder    
    For Each FSO_FILE IN FSO_FOLDER.Files

       ''Test extension
       If FSO.GetExtensionName(FSO_FILE.Name) = FILE_EXT Then
           ''Do your thing here
       Else:End if

    Next

Else

Msgbox "No Files Found at " & FILE_PATH

End If

Set FSO = Nothing
Set FSO_FOLDER = Nothing

End Sub
person UberNubIsTrue    schedule 16.07.2013
comment
Это сработало именно так, как задумано, мне даже не пришлось возиться ни с чем - Абсолютно легендарно, я не могу отблагодарить вас в достаточной мере! Это беспокоит меня уже несколько дней! - person Ashencross; 16.07.2013

Для тех, кто хочет, чтобы старый код, основанный на Application.FileSearch, снова работал с минимальными изменениями, вот класс, который вы можете использовать в качестве замены:

https://github.com/MonsieurV/VBA.Application.FileSearch

Все, что вам нужно сделать, это заменить Set fs = Application.FileSearch на:

Dim fs As YtoFileSearch
Set fs = New YtoFileSearch

И используйте его как обычно:

With fs
    .NewSearch
    .LookIn = "D:\User\Downloads\"
    .fileName = "*.pdf"
    If .Execute() > 0 Then
        Debug.Print "Found these PDF files:"
        For i = 1 To .FoundFiles.Count
           Debug.Print .FoundFiles(i)
       Next
    Else
        Debug.Print "Nothing found"
    End If
End With

Если у вас нет проблем с устаревшим кодом, лучше используйте напрямую Scripting.FileSystemObject или Dir() (см. ответ UberNubIsTrue)

person Yoan Tournade    schedule 19.07.2015