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