Note: The other languages of the website are Google-translated. Back to English

Como listar todos os arquivos em uma pasta e subpastas em uma planilha?

Você já tentou listar todos os nomes de arquivo de uma pasta em uma planilha, incluindo os arquivos localizados em suas subpastas? Na verdade, não há uma forma direta de listarmos os nomes de arquivo de uma pasta e sua subpasta no Excel, porém, hoje, vou apresentar alguns truques rápidos para resolver este trabalho.

Liste todos os nomes de arquivos na pasta e subpasta com o código VBA

Liste todos os nomes de arquivos na pasta e subpasta de forma rápida e fácil com o Kutools para Excel


Normalmente, o Excel não tem nenhum recurso integrado para lidar com essa tarefa, mas você pode aplicar o seguinte código VBA para concluir esse problema.

1. Ative uma nova planilha que listará os nomes dos arquivos.

2. Segure o ALT + F11 chaves no Excel, e abre o Microsoft Visual Basic para Aplicações janela.

3. Clique inserção > Móduloe cole o seguinte código no Janela Módulo.

Código VBA: lista todos os nomes de arquivos na pasta e subpasta

Sub MainList()
'Updateby Extendoffice
Set folder = Application.FileDialog(msoFileDialogFolderPicker)
If folder.Show <> -1 Then Exit Sub
xDir = folder.SelectedItems(1)
Call ListFilesInFolder(xDir, True)
End Sub
Sub ListFilesInFolder(ByVal xFolderName As String, ByVal xIsSubfolders As Boolean)
Dim xFileSystemObject As Object
Dim xFolder As Object
Dim xSubFolder As Object
Dim xFile As Object
Dim rowIndex As Long
Set xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Set xFolder = xFileSystemObject.GetFolder(xFolderName)
rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Row + 1
For Each xFile In xFolder.Files
  Application.ActiveSheet.Cells(rowIndex, 1).Formula = xFile.Name
  rowIndex = rowIndex + 1
Next xFile
If xIsSubfolders Then
  For Each xSubFolder In xFolder.SubFolders
    ListFilesInFolder xSubFolder.Path, True
  Next xSubFolder
End If
Set xFile = Nothing
Set xFolder = Nothing
Set xFileSystemObject = Nothing
End Sub
Function GetFileOwner(ByVal xPath As String, ByVal xName As String)
Dim xFolder As Object
Dim xFolderItem As Object
Dim xShell As Object
xName = StrConv(xName, vbUnicode)
xPath = StrConv(xPath, vbUnicode)
Set xShell = CreateObject("Shell.Application")
Set xFolder = xShell.Namespace(StrConv(xPath, vbFromUnicode))
If Not xFolder Is Nothing Then
  Set xFolderItem = xFolder.ParseName(StrConv(xName, vbFromUnicode))
End If
If Not xFolderItem Is Nothing Then
  GetFileOwner = xFolder.GetDetailsOf(xFolderItem, 8)
Else
  GetFileOwner = ""
End If
Set xShell = Nothing
Set xFolder = Nothing
Set xFolderItem = Nothing
End Function

4. Depois de colar o código no Módulo, pressione F5 chave para executar este código, e um Macros caixa de diálogo aparece, selecione o Lista principal nome da macro e clique em Opere botão, veja a captura de tela:

arquivos da lista de documentos na pasta subpasta 1

5. E no Procurar janela, selecione a pasta que deseja listar todos os nomes de arquivo, incluindo as subpastas, consulte a captura de tela:

arquivos da lista de documentos na pasta subpasta 2

6. Depois de especificar a pasta, clique em OK botão, e todos os nomes de arquivo na pasta e suas subpastas foram listados na planilha atual da célula A2, consulte as capturas de tela:

arquivos da lista de documentos na pasta subpasta 3
1
arquivos da lista de documentos na pasta subpasta 4

Com o código acima, você pode apenas listar os nomes dos arquivos, às vezes, você precisa listar outros atributos, como tamanho do arquivo, tipo de arquivo, hora de criação, pasta de conteúdo e outros. Kutools for Excel contém uma função útil - Lista de nomes de arquivo, com esse recurso, você pode listar rapidamente todos ou tipos específicos de nomes de arquivo em uma pasta e suas subpastas.

Kutools for Excel : com mais de 300 suplementos úteis do Excel, grátis para testar sem limitação em 30 dias.

Depois de instalar Kutools for Excel, siga os seguintes passos:

1. Clique Empreendimento > Importar e Exportar > Lista de nomes de arquivo, veja a captura de tela:

2. No Lista de nomes de arquivo caixa de diálogo, faça as seguintes operações:

A: Clique arquivos da lista de documentos na pasta subpasta 7botão para escolher a pasta onde deseja listar os nomes dos arquivos;

B: Especifique o tipo de arquivo que você deseja listar no Tipo de arquivo seção;

C: Selecione uma unidade de tamanho de arquivo que deseja exibir a partir do Unidade de tamanho de arquivo seção.

Nota: Para listar os nomes de arquivo da subpasta, verifique Incluir arquivos em subdiretórios, você também pode verificar o Incluir arquivos e pastas ocultos como você precisa. Se você checar Crie hiperlinks opção, ele criará hiperlinks para cada nome de arquivo e pastas.

Baixe e teste grátis agora!

3. Então clique OK botão, todos os arquivos contidos na pasta selecionada e suas subpastas foram exibidos com os seguintes atributos em uma nova planilha. Veja a imagem:

arquivos da lista de documentos na pasta subpasta 8

Clique para saber mais detalhes sobre este utilitário Lista de nomes de arquivos.

Baixe e teste grátis Kutools para Excel agora!


Kutools for Excel: com mais de 300 suplementos úteis do Excel, grátis para testar sem limitação em 30 dias. Baixe e teste grátis agora!

As melhores ferramentas de produtividade para escritório

O Kutools for Excel resolve a maioria dos seus problemas e aumenta sua produtividade em 80%

  • armadilha para peixes: Insira rapidamente fórmulas complexas, gráficos e qualquer coisa que você tenha usado antes; Criptografar células com senha; Criar lista de discussão e enviar emails ...
  • Barra Super Fórmula (edite facilmente várias linhas de texto e fórmula); Layout de leitura (ler e editar facilmente um grande número de células); Colar na faixa filtrada...
  • Mesclar células / linhas / colunas sem perder dados; Dividir o conteúdo das células; Combinar linhas / colunas duplicadas... Evite células duplicadas; Comparar intervalos...
  • Selecione Duplicado ou Único Linhas; Selecione linhas em branco (todas as células estão vazias); Super Find e Fuzzy Find em muitos livros; Seleção aleatória ...
  • Cópia exata Várias células sem alterar a referência da fórmula; Criação automática de referências para várias folhas; Inserir marcadores, Caixas de seleção e mais ...
  • Extrair Texto, Adicionar texto, remover por posição, Remover Espaço; Criar e imprimir subtotais de paginação; Converter entre conteúdo de células e comentários...
  • Super Filtro (salvar e aplicar esquemas de filtro a outras planilhas); Classificação Avançada por mês / semana / dia, frequência e mais; Filtro Especial por negrito, itálico ...
  • Combine pastas de trabalho e planilhas; Mesclar tabelas com base em colunas-chave; Divida os dados em várias folhas; Conversão em lote de xls, xlsx e PDF...
  • Mais de 300 recursos poderosos. Suporta Office / Excel 2007-2021 e 365. Suporta todos os idiomas. Fácil implantação em sua empresa ou organização. Recursos completos de avaliação gratuita de 30 dias. Garantia de devolução do dinheiro em 60 dias.
guia kte 201905

Guia do Office traz interface com guias para o Office e torna seu trabalho muito mais fácil

  • Habilite a edição e leitura com guias em Word, Excel, PowerPoint, Publisher, Access, Visio e Project.
  • Abra e crie vários documentos em novas guias da mesma janela, em vez de em novas janelas.
  • Aumenta sua produtividade em 50% e reduz centenas de cliques do mouse para você todos os dias!
parte inferior da aba do escritório
Comentários (20)
Ainda não há classificações. Seja o primeiro a avaliar!
Este comentário foi feito pelo moderador no site
Bom artigo Obrigado :D
Este comentário foi feito pelo moderador no site
querido, Obrigado por este utilitário maravilhoso .....!!! anilkumar
Este comentário foi feito pelo moderador no site
COMO FAZER ESSA CONSULTA FUNCIONAR PARA OBTER OS NOMES DE ARQUIVO LISTADOS DA célula B2 em vez da A2?
Este comentário foi feito pelo moderador no site
Olá, Satis,
O código a seguir pode ajudá-lo a colocar os nomes dos arquivos em qualquer célula que você selecionou, tente:

SubLista Principal()
On Error Resume Next
Set xRg = Application.InputBox("Por favor, selecione uma célula para colocar os nomes dos arquivos:", "KuTools For Excel", Selection.Address, , , , , 8)
Se xRg não for nada, saia do sub
Defina xRg = xRg(1)
Definir pasta = Application.FileDialog(msoFileDialogFolderPicker)
Se Folder.Show <> -1 Then Exit Sub
xdir = pasta.SelectedItems (1)
Chame ListFilesInFolder(xRg, xDir, True)
End Sub
Sub ListFilesImolder (BYVAL XRG AS RANGE, BYVAL XFOLDERNAME como String, ByVal XissubFolders como booleano)
Dim xFileSystemObject como objeto
Dim xFolder como objeto
Dim xSubFolder como objeto
Dim xArquivo como objeto
Dim RowIndex por tempo
Set xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Definir xFolder = xFileSystemObject.GetFolder(xFolderName)
índice de linha = 1
Para cada xFile em xFolder.Files
xrg.formula = xfile.name
Definir xRg = xRg.Offset(rowIndex)
índice de linha = 1
Próximo xArquivo
Se xIsSubpastas Então
Para cada xSubFolder em xFolder.SubFolders
ListfilesImolder xrg, xsubfolder.path, true
Próxima xSubPasta
Se acabar
Definir xFile = Nada
Definir xFolder = Nada
Definir xFileSystemObject = Nada
End Sub
Este comentário foi feito pelo moderador no site
excelente!!! adorei, obrigado
Este comentário foi feito pelo moderador no site
Não tenho certeza .. mas considera pastas longas. eu escrevi um código semelhante e ele falha onde o caminho da pasta/arquivo excede 256 caracteres? Pensamentos por favor?
Este comentário foi feito pelo moderador no site
Muito obrigado pelo artigo útil!
Como posso atualizar automaticamente a lista e identificar as alterações?
Este comentário foi feito pelo moderador no site
Isso me ajudou a converter meu código para obter a chamada recursiva, mas me pergunto sobre a maneira como você usa objetos. Prefiro definir meus objetos como eles são, sejam pastas de trabalho, planilhas ou objetos do sistema de arquivos. (dim wbDest como excel.workbook, dim wsDest como excel.worksheet, por exemplo. Dessa forma, nunca preciso me preocupar com o que é a planilha ativa.

Eu também me perguntei sobre o uso de .show - if.show <>-1, e não posso deixar de sentir que seria mais fácil para as pessoas entenderem se você usasse if.show = false.

E em termos de escrever para o destino, senti que usar células e fórmulas parecia ser um longo caminho

Então no meu código eu tenho, por exemplo,
wsDest.Range("B" & CurRow) = fil.name
(CurRow = Linha Atual)

Não estou criticando, apenas me perguntando se você faz assim por qualquer motivo que não seja preferência pessoal. - Sempre disposto a aprender


Mas fora isso obrigado pela ajuda
Este comentário foi feito pelo moderador no site
Obrigado por este código, ele me ajudou com um pedido de trabalho, agora posso importar esses resultados para o Access para uma maior transformação.
Este comentário foi feito pelo moderador no site
Sub "GetFileOwner()" no código acima não é usado.
Este comentário foi feito pelo moderador no site
Olá, jumpjack,
O código acima funciona bem no meu Excel, qual versão do Excel você usa?
Este comentário foi feito pelo moderador no site
Extremamenthe elegante Este Códão!
Este comentário foi feito pelo moderador no site
Qual foi o objetivo do parâmetro ByVal xIsSubfolders As Boolean?
Este comentário foi feito pelo moderador no site
Meu VBA está dizendo que a pasta variável não está definida. Alguém sabe por que isso é?
Este comentário foi feito pelo moderador no site
Realmente novo no VBA. como faço para usar o código acima, mas tenho o caminho do arquivo embutido nele para não ter que procurá-lo todas as vezes?
Este comentário foi feito pelo moderador no site
Ei, então se eu tiver que extrair apenas uma extensão de toda a lista, onde devo fazer alterações?
Este comentário foi feito pelo moderador no site
Funciona no MAC também?
Este comentário foi feito pelo moderador no site
Eu modifiquei seu código para fazê-lo reciclar e executar novamente a caixa de diálogo da pasta continuamente até que você pressione Cancel. Unfornatually gera alguns errors.1. Se as subpastas forem envolvidas em uma pasta selecionada, a próxima pasta selecionada ficará fora de ordem numérica.2. Se as subpastas forem envolvidas em uma pasta selecionada, o botão Cancelar deve ser repetido e repetido dependendo de quantas pastas você adicionou.
Código:
SubLista Principal()
'Atualizar por Extendoffice
Definir pasta = Application.FileDialog(msoFileDialogFolderPicker)
If folder.Show <> -1 Then Exit Sub
xDir = pasta.SelectedItems(1)
Chame ListFilesInFolder(xDir, True)
End Subsub ListFilesImolder (ByVal XFolderName como String, ByVal XissubFolders como booleano)
Dim xFileSystemObject como objeto
Dim xFolder como objeto
Dim xSubFolder como objeto
Dim xArquivo como objeto
Dim RowIndex por tempo
Set xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Definir xFolder = xFileSystemObject.GetFolder(xFolderName)
rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Row + 1
Para cada xFile em xFolder.Files
Application.ActiveSheet.Cells (RowIndex, 1) .Formula = xfile.name
índice de linha = índice de linha + 1
Próximo xArquivo
Se xIsSubpastas Então
Para cada xSubFolder em xFolder.SubFolders
ListfilesImfolder xsubFolder.path, true
Próxima xSubPasta
Se acabar
Definir xFile = Nada
Definir xFolder = Nada
Definir xFileSystemObject = Nada
End Sub

alguma ideia ?
Este comentário foi feito pelo moderador no site
Desculpe... dei o código errado (abaixo), aqui está o código que modifiquei..
Código:
SubLista Principal()
On Error Resume Next
Dim xFileSystemObject como objeto
Dim xFolder como objeto
Dim xSubFolder como objeto
Dim xArquivo como objeto
Dim RowIndex por tempo
Resposta escura como variante
resposta = falso
Com Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Selecione uma pasta"
.AllowMultiSelect = Falso
Definir pasta = Application.FileDialog(msoFileDialogFolderPicker)
Se pasta.Mostrar = -1 Então
xDir = pasta.SelectedItems(1)
Outro
Exit Sub
Se acabar
Terminar com

Chame ListFilesInFolder(xDir, True)
End Sub

Sub listfilesImfolder (byval xFolderName como string, ByVal XissubFolders como booleano)
Set xFileSystemObject = CreateObject("Scripting.FileSystemObject")
Definir xFolder = xFileSystemObject.GetFolder(xFolderName)
rowIndex = Application.ActiveSheet.Range("A65536").End(xlUp).Row + 1

' Adiciona um espaço e depois o nome da pasta na planilha
índice de linha = índice de linha + 1
Com Application.ActiveSheet.Cells(rowIndex, 1)
.Value = xFolder.Name
.Font.size = 12
.Font.FontStyle = "Negrito Itálico"
Terminar com
índice de linha = índice de linha + 1

Para cada xFile em xFolder.Files
Application.ActiveSheet.Cells (RowIndex, 1) .Formula = xfile.name
índice de linha = índice de linha + 1
Próximo xArquivo
Se xIsSubpastas Então
Para cada xSubFolder em xFolder.SubFolders
ListfilesImfolder xsubFolder.path, true
Próxima xSubPasta
índice de linha = índice de linha + 1
Se acabar

Definir xFile = Nada
Definir xFolder = Nada
Definir xFileSystemObject = Nada

Chamar lista principal
End Sub


Este comentário foi feito pelo moderador no site
Belo trabalho, exatamente o que eu estava tentando criar. Mas isso é 1000% melhor.
Não há comentários postados aqui ainda
Deixe o seu comentário
Postando como convidado
×
Avalie esta postagem:
0   Personagens
Locais sugeridos

Siga-nos

Copyright © 2009 - www.extendoffice.com. | Todos os direitos reservados. Distribuído por ExtendOffice. | | | Mapa do site
Microsoft e o logotipo do Office são marcas comerciais ou marcas registradas da Microsoft Corporation nos Estados Unidos e / ou em outros países.
Protegido por Sectigo SSL