Listar todos os arquivos de um diretório

Listar todos os arquivos de um diretório

Objetivo: Demonstrar o uso do VBA para listar todos o arquivos de determinada extensão a partir de um diretório determinado.

São utilizadas para isso várias técnicas interessantes como selecionar pastas, solicitar entradas de dados a partir de uma caixa de mensagem, como criar e utilizar um vetor redimensionado dinamicamente.

Esta planilha busca todos os arquivos de um determinado diretório a partir de uma busca rápida. Para tanto você clica no botão, especifica o tipo de arquivo que será buscado, exemplo *.xlsm ou *.xls, *.xlsm digitando junto e separado com vírgula e depois determinando o diretório aonde serão identificados os arquivos.

Há no código fonte programações desnecessárias, como é o caso do vetor dinâmico, mas ele está ali para servir de exemplo e pesquisa.

Abaixo o código fonte da planilha.

Public Declare PtrSafe Function SHBrowseForFolder Lib "shell32.dll" Alias _
    "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Public Declare PtrSafe Function SHGetPathFromIDList Lib "shell32.dll" Alias _
    "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) _
    As Long
Public Type BROWSEINFO
    hOwner As Long
    pidlRoot As Long
    pszDisplayName As String
    lpszTitle As String
    ulFlags As Long
    lpfn As Long
    lParam As Long
    iImage As Long
End Type


Sub ListarArquivosExcel()
    Dim FName As String
    'Cria um vetor de strings
    Dim arNames() As String
    Dim myCount As Integer
    Dim fPasta As String
    Dim lsExtensao As String

    lsExtensao = "*.*"

    'Camihho do arquivo
    lsExtensao = InputBox("Digite o tipo de arquivo procurado, " & vbcr13 & " exemplo *.xls ou *.* para Excel ou para todos:", "Extensão do arquivo...", ActName)

    'Seleciona a pasta
    fPasta = gfSelecionarPasta("C:", "Selecione o local aonde será gravado o arquivo:")

    'Determina o diretório e a extensão do arquivo
    FName = Dir(fPasta & lsExtensao)

    'Limpa a planilha
    Sheets("Plan1").Range("A:XFD").Clear

    'Enquanto FName for igual a vazio "", realiza a listagem dos arquivos
    Do Until FName = ""
        myCount = myCount + 1
        'Redimensiona o vetor, preservando os dados
        ReDim Preserve arNames(1 To myCount)
        arNames(myCount) = FName
        'Passa os dados para a planilha
        Cells(myCount, 1).Value = arNames(myCount)
        'Atualiza a variável FName
        FName = Dir
    Loop
End Sub

Public Function gfSelecionarPasta(ByVal vFolder As String, Optional Title As String, Optional hWnd) As String

    Dim bi As BROWSEINFO
    Dim pidl As Long
    Dim folder As String

    folder = String$(255, Chr$(0))

    With bi
        If IsNumeric(hWnd) Then .hOwner = hWnd
        .pidlRoot = 0
        If Title  "" Then
            .lpszTitle = Title & Chr$(0)
        Else
            .lpszTitle = "Select a Folder" & Chr$(0)
        End If
    End With

    pidl = SHBrowseForFolder(bi)

    If SHGetPathFromIDList(ByVal pidl, ByVal folder) Then
        folder = Left(folder, InStr(folder, Chr$(0)) - 1)
    Else
        folder = ""
    End If

    If Right(folder, 1)  "\" And Len(folder) > 0 Then folder = folder & "\"

    gfSelecionarPasta = folder

End Function

Baixe a planilha

Abraço

Marcos Rieper