Listar todos os arquivos de um diretório

Menu Suspenso no Excel - VBA
Menu Suspenso no Excel – VBA
11 de dezembro de 2011
Cadastro de Orçamentos/Pedido de Venda Excel e VBA - Orçamento/Pedido de Venda Excel
Cadastro de orçamento Excel / VBA
24 de dezembro de 2011

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

Abraço

Marcos Rieper


Clique aqui e leia mais sobre Excel VBA. https://www.guiadoexcel.com.br/vba/ O Guia do Excel foi criado por Marcos Rieper e oferece artigos, dicas, tutoriais e modelos de planilhas prontas. Aqui você encontra tudo sobre Excel, seja de nível básico, intermediário,  avançado e VBA. O Guia do Excel oferece diversos materiais completamente gratuitos para download. Navegue em nosso site e confira! Conheça também a nossa Loja do Excel https://loja.guiadoexcel.com.br/
Cursos

Curso Excel Completo – Curso Excel Básico + Curso Excel Avançado – Acesso Vitalício

R$218,00 R$179,00

COMPRAR
Cursos

Curso Excel Master – Curso Excel Básico + Curso Excel Avançado + Curso VBA Excel + LP – Acesso Vitalício

R$357,00 R$249,00

COMPRAR
Cursos

Curso Excel PRO – Curso Excel Avançado + Curso VBA Excel + Lógica de programação – Acesso Vitalício

R$258,00 R$199,00

COMPRAR
Cursos

Curso Excel Web – Curso VBA Excel + Lógica de programação + Curso Web Scraping VBA- Acesso Vitalício

R$388,90 R$309,00

COMPRAR

4 Comentários

  1. ThiagoCS disse:

    Valeu mesmo pelo código!

    Tomei a liberdade de fazer algumas alterações… xD

    Sub ListarArquivosExcel(ByVal lsExtensao As String)
    ‘// lsExtensao = “*.*” Todos os tipos de arquivos
    ‘// lsExtensao = “*.xls” Somente arquivos com tipo começando por XLS. Ex.: xls, xlsx, xlsm…
    ‘// lsExtensao = InputBox(“Digite o tipo de arquivo procurado” & vbcr13, “Extensão do arquivo…”, ActName)

    ‘// Seleciona a pasta
    Dim lsPasta As String
    ‘lsPasta = gfSelecionarPasta(“C:”, “Selecione o local aonde será gravado o arquivo:”)
    lsPasta = ActiveWorkbook.Path

    ‘// Determina o diretório e a extensão do arquivo.
    Dim lsName As String
    lsName = Dir(lsPasta & “\” & lsExtensao)

    ‘// Limpa a planilha
    ActiveWorkbook.ActiveSheet.Range(“A:ZZ”).Clear

    ‘// Cria um vetor de strings e um contador.
    Dim arNames() As String
    Dim myCount As Integer

    ‘// Até que lsName seja diferente a “”, realiza a listagem dos arquivos.
    Do Until lsName = “”
    If lsName ActiveWorkbook.Name Then
    myCount = myCount + 1

    ‘// Redimensiona o vetor, preservando os dados.
    ReDim Preserve arNames(1 To myCount)

    ‘// Adiciona o valor de lsName ao final do array.
    arNames(myCount) = lsName

    ‘// Passa o último dado para a planilha. Espera-se que seja igual a lsName.
    Cells(myCount, 1).Value = arNames(myCount)
    End If

    ‘// Atualiza a variável lsName
    lsName = Dir
    Loop

    MsgBox myCount & ” files listed.”
    End Sub

  2. Eduardo disse:

    Seu codigo é perfeito, mas tem como colocar na lista a data e o horario de modificação do arquivo.

  3. Thyago Ribeiro disse:

    “Seu codigo é perfeito, mas tem como colocar na lista a data e o horario de modificação do arquivo.”

    dataCSV = FileDateTime(“C:\DadosTaltoFF.csv”)
    MsgBox(“O arquivo C:\DadosTaltoFF.csv foi extraído dia: ” & dataCSV)

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

Inscreva-se no nosso canal do Youtube!


Junte-se ao nosso canal do Youtube. Começamos em abril de 2016, mas já temos mais de 06:00 h de treinamentos gratuitos e este número irá aumentar. Vídeos novos todos os sábados.