Итерировать все файлы определенного пути в Excel VBA? - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь перебрать кучу файлов .xlsx на конкретном диске, чтобы любой файл соответствовал следующему формату:

H:\[*FOLDER NAME*]\SpecificFolder\Finalized Plans\2019 Prefix[*].xlsx

Другими словами, внутри папок на диске H с подпапками \SpecificFolder\Finalized Plans\, содержащими .xlsx файлы, начинающиеся с буквальной фразы "2019 Prefix". Например

H:\Widget\SpecificFolder\Finalized Plans\2019 Prefix Howdyado Neighbor.xlsx

или

H:\Rofl672\SpecificFolder\Finalized Plans\2019 Prefix Bob.xlsx

Это то, что я могу как-то повторить, используя Dir()? Как-нибудь иначе?

Это что-то вроде Dir("H:\*\SpecificFolder\Finalized Plans\2019 Prefix*.xlsx")? (это то, что я пробовал, и оно выдало мне ошибку «Неверное имя файла или номер», поэтому синтаксис может быть неправильным)

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Есть много способов сделать это. Я думаю, что это даст вам то, что вы хотите.

Sub GetFilesInFolder(SourceFolderName As String, Subfolders As Boolean)

'--- For Example:Folder Name= "D:\Folder Name\" and Flag as Yes or No

Dim FSO As Scripting.FileSystemObject
Dim SourceFolder As Scripting.folder, SubFolder As Scripting.folder
Dim FileItem As Scripting.File
'Dim r As Long
    Set FSO = New Scripting.FileSystemObject
    Set SourceFolder = FSO.GetFolder(SourceFolderName)

    '--- This is for displaying, whereever you want can be configured

    r = 14
    For Each FileItem In SourceFolder.Files
        Cells(r, 2).Formula = r - 13
        Cells(r, 3).Formula = FileItem.Name
        Cells(r, 4).Formula = FileItem.Path
        Cells(r, 5).Formula = FileItem.Size
        Cells(r, 6).Formula = FileItem.Type
        Cells(r, 7).Formula = FileItem.DateLastModified
        Cells(r, 8).Formula = "=HYPERLINK(""" & FileItem.Path & """,""" & "Click Here to Open" & """)"

        r = r + 1   ' next row number
    Next FileItem

    '--- This is the Function to go each and Every Folder and get the Files. This is a Nested-Function Calling.

    If Subfolders = True Then
        For Each SubFolder In SourceFolder.Subfolders
            ListFilesInFolder SubFolder.Path, True
        Next SubFolder
    End If

    Set FileItem = Nothing
    Set SourceFolder = Nothing
    Set FSO = Nothing
End Sub

См. Ссылку ниже для всех деталей.

http://learnexcelmacro.com/wp/2011/11/how-to-get-list-of-all-files-in-a-folder-and-sub-folders/

Нажмите на ссылку «Загрузить сейчас», чтобы загрузить файл сэмпла.

0 голосов
/ 09 января 2019

Вот очень быстрый подход с использованием WScript, который поддерживает подстановочные знаки.

'Adapted from --> https://stackoverflow.com/a/31132876/4839827
Public Sub GetAllFilesMatchingPattern(StartingFolder As String, FolderPattern As String)
    If Right$(StartingFolder, 1) <> "\" Then StartingFolder = StartingFolder & "\"
    Dim StandardOutput As String
    Dim ws             As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
    Dim Files          As Variant
    StandardOutput = CreateObject("WScript.Shell").Exec("CMD /C DIR """ & StartingFolder & FolderPattern & """ /S /B /A:-D").StdOut.ReadAll

    If Not StandardOutput = vbNullString Then
        Files = Split(StandardOutput, vbCrLf)
        ws.Range("A1").Resize(UBound(Files), 1).Value2 = Application.Transpose(Files)
    End If
End Sub


Sub Example()
    GetAllFilesMatchingPattern "H:\", "*\SpecificFolder\Finalized Plans\2019 Prefix*.xlsx"
End Sub
...