Função VBA DIR - Uma explicação fácil com exemplos

O VBA tem algumas funções úteis que podem levar sua automação no Excel para o próximo nível.

Uma dessas funções é o Função VBA DIR.

Embora por si só, pode parecer uma função simples que faz uma coisa específica.

Mas ao combiná-lo com alguns outros elementos úteis da linguagem de codificação VBA, você pode criar coisas poderosas (abordadas nos exemplos mais adiante neste tutorial).

O que a função VBA Dir faz?

Use a função VBA DIR quando quiser obter o nome do arquivo ou pasta, usando o nome do caminho.

Para dar um exemplo, se você tiver um arquivo Excel em uma pasta, poderá usar a função VBA DIR para obter o nome desse arquivo Excel (ou qualquer outro tipo de arquivo).

E se eu quiser obter os nomes de todos os arquivos do Excel na pasta (ou de todos os arquivos - sejam arquivos do Excel ou não)?

Voce tambem pode fazer isso!

Quando você usa a função DIR uma vez, ela retorna o primeiro nome de arquivo em uma pasta. Agora, se você deseja obter os nomes do segundo, terceiro, quarto arquivos também, você pode usar a função DIR novamente (abordada posteriormente como um exemplo).

Dir retorna o primeiro nome de arquivo que corresponda ao nome do caminho. Para obter quaisquer nomes de arquivo adicionais que correspondam ao nome do caminho, chame Dir novamente sem argumentos. Quando não houver mais nomes de arquivo correspondentes, Dir retorna uma string de comprimento zero (“”). Abordado nos Exemplos 3 e 4 posteriormente neste tutorial.

Sintaxe da função VBA DIR

Dir [(nome do caminho [, atributos])]
  • nome do caminho: Este é um argumento opcional. Pode ser o nome do arquivo, nome da pasta ou nome do diretório. Se o nome do caminho não for encontrado, a função VBA DIR retorna uma string de comprimento zero (“”)
  • atributos: Este é um argumento opcional. Você pode usar este argumento para especificar alguns atributos e a função DIR retornará os nomes dos arquivos com base nesses atributos. Por exemplo, se você deseja uma lista de todos os arquivos ocultos ou arquivos somente leitura (junto com arquivos sem atributos), você precisa especificar isso neste argumento.

Atributos disponíveis para uso na função VBA DIR (você pode usar um ou mais deles):

Constante Valor Descrição
vbNormal 0 (Padrão) Especifica arquivos sem atributos.
vbReadOnly 1 Especifica arquivos somente leitura, além de arquivos sem atributos.
vbHidden 2 Especifica arquivos ocultos, além de arquivos sem atributos.
VbSystem 4 Especifica arquivos de sistema, além de arquivos sem atributos. Não disponível no Macintosh.
vbVolume 8 Especifica o rótulo do volume; se qualquer outro atributo for especificado, vbVolume será ignorado. Não disponível no Macintosh.
vbDirectory 16 Especifica diretórios ou pastas, além de arquivos sem atributos.
vbAlias 64 O nome do arquivo especificado é um alias. Disponível apenas no Macintosh.

Usando caracteres curinga com função DIR

Se você estiver trabalhando com o Windows, também pode usar os caracteres curinga na função DIR.

Observe que você não pode usá-los ao trabalhar com o VBA no Macintosh.

Usar curingas pode ser útil quando:

  • Você deseja obter os nomes de arquivo de um tipo específico (como .XLSX ou .PPTX)
  • Quando você tem um sufixo / prefixo específico em nomes de arquivos e deseja obter os nomes desses arquivos / pastas / diretórios. Por exemplo, se quiser os nomes de todos os arquivos com o prefixo 2021-2022, você pode fazer isso usando caracteres curinga.

Existem três caracteres curinga no Excel:

  1. * (asterisco) - Representa qualquer número de caracteres. Por exemplo, 2019* forneceria os nomes de todos os arquivos com o prefixo 2021-2022 nele.
  2. ? (ponto de interrogação) - Representa um único personagem. Por exemplo, 2021-2022? forneceria os nomes de todos os arquivos que começam com 2021-2022 e têm mais um caractere no nome (como 2021-2022A, 2021-2022B, 2021-2022C e assim por diante)

Nota: Há mais um caractere curinga - til (~). Como não é muito usado, pulei sua explicação. Você pode ler mais sobre isso aqui se estiver interessado.

Função VBA DIR - Exemplos

Agora vamos mergulhar e ver alguns exemplos de uso da função VBA DIR.

Exemplo 1 - Obtendo o nome do arquivo de seu caminho

Quando você tem o caminho de um arquivo, pode usar a função DIR para obter o nome do arquivo a partir dele.

Por exemplo, o código a seguir retorna o nome do arquivo e o mostra em uma caixa de mensagem.

Sub GetFileNames () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \ Excel File A.xlsx") MsgBox FileName End Sub

O código acima usa uma variável ‘FileName’ para armazenar o nome do arquivo que é retornado pela função DIR. Em seguida, ele usa uma caixa de mensagem para exibir o nome do arquivo (conforme mostrado abaixo).

E o que acontece quando o arquivo não existe?

Nesse caso, a função DIR retornaria uma string vazia.

O código a seguir usa uma instrução If Then Else para verificar se o arquivo existe ou não. Se o arquivo não existir, ele mostra uma caixa de mensagem com o texto “Arquivo não existe”, caso contrário, mostra o nome do arquivo.

Sub CheckFileExistence () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \ Excel Arquivo A.xlsx") If FileName "" Then MsgBox FileName Else MsgBox "Arquivo não existe" End If End Sub

Exemplo 2 - Verifique se um diretório existe ou não (e crie se não existir)

O código abaixo verifica se a pasta ‘Test’ existe ou não.

Uma caixa de mensagem é usada para mostrar uma mensagem caso a pasta exista ou quando ela não existir.

Sub CheckDirectory () Dim PathName As String Dim CheckDir As String PathName = "C: \ Users \ sumit \ Desktop \ Test" CheckDir = Dir (PathName, vbDirectory) If CheckDir "" Then MsgBox CheckDir & "existe" Else MsgBox "O diretório não existe "End If End Sub

Você pode refinar este código ainda mais para verificar se a pasta existe ou não e, se não existir, você pode usar o VBA para criar essa pasta.

Abaixo está o código que usa o Função MkDir para criar uma pasta caso ela não exista.

Sub CreateDirectory () Dim PathName As String Dim CheckDir As String PathName = "C: \ Users \ sumit \ Desktop \ Test" CheckDir = Dir (PathName, vbDirectory) If CheckDir "" Then MsgBox CheckDir & "pasta existe" Else MkDir PathName MsgBox "Uma pasta foi criada com o nome" & CheckDir End If End Sub

Exemplo 3 - Obter os nomes de todos os arquivos e pastas em um diretório

Se você deseja obter uma lista de todos os nomes de arquivos e pastas em um diretório, pode usar a função DIR.

O código a seguir lista todos os arquivos e nomes de pastas na pasta Test (que está localizada no seguinte caminho - C: \ Users \ sumit \ Desktop \ Test \).

Estou usando Debug.Print para mostrar os nomes na janela Immediate. Você também pode usar isso para listar os nomes em uma caixa de mensagem ou em uma coluna no Excel.

Sub GetAllFile & FolderNames () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \", vbDirectory) Do While FileName "" Debug.Print FileName FileName = Dir () Loop End Sub

O loop Do While no código acima continua até que todos os arquivos e pastas no caminho fornecido tenham sido cobertos. Quando não há mais arquivos / pastas para cobrir, FileName se torna uma string nula e o loop para.

Exemplo 4 - Obtenha os nomes de todos os arquivos em uma pasta

Você pode usar o código abaixo para obter os nomes de todos os arquivos em uma pasta / diretório (e não os nomes das subpastas).

Sub GetAllFileNames () Dim FileName As String FileName = Dir ("C: \ Users \ sumit \ Desktop \ Test \") Do While FileName "" Debug.Print FileName FileName = Dir () Loop End Sub

Este código é igual ao código usado no Exemplo 3, com uma pequena diferença.

Neste código, eu não especifiquei vbDirectory na função DIR. Ao especificar vbDirectory, ele fornecerá os nomes de todos os arquivos e também das pastas.

Quando você não especifica vbDirectory, a função DIR fornecerá apenas os nomes dos arquivos.

Observação: Se você deseja obter os nomes de todos os arquivos na pasta principal e nas subpastas, não pode usar a função DIR (já que não é recursiva). Para fazer isso, você pode usar o Power Query (sem necessidade de codificação) ou usar o objeto do sistema de arquivos no VBA (com recursão).

Exemplo 5 - Obtenha os nomes de todas as subpastas dentro de uma pasta

O código a seguir fornecerá os nomes de todas as subpastas dentro da pasta especificada.

Usa o Função GetAtr em VBA, o que nos permite verificar se o nome retornado pela função DIR é o nome de um arquivo ou de uma pasta / diretório.

Sub GetSubFolderNames () Dim FileName As String Dim PathName As String PathName = "C: \ Usuários \ sumit \ Desktop \ Test \" FileName = Dir (PathName, vbDirectory) Do While FileName "" Se GetAttr (PathName & FileName) = vbDirectory Então Debug.Print FileName End If FileName = Dir () Loop End Sub

Novamente, estou usando Debug.Print para obter os nomes na janela imediata. Você pode obtê-los em uma caixa de mensagem ou no Excel (modificando o código de acordo).

Exemplo 6 - Obtenha o primeiro arquivo Excel de uma pasta

Com a função DIR, você pode especificar a extensão do arquivo ou qualquer sufixo / prefixo que você deseja no nome do arquivo que é retornado.

O código a seguir exibiria o nome do primeiro arquivo Excel na pasta Teste.

Sub GetFirstExcelFileName () Dim FileName As String Dim PathName As String PathName = "C: \ Users \ sumit \ Desktop \ Test \" FileName = Dir (PathName & "* .xls *") MsgBox FileName End Sub

Observe que usei * .xls * (sinal de asterisco em ambos os lados). Isso garantirá que todas as versões dos arquivos do Excel sejam verificadas (.xls, xlsx, .xlsm, .xlsb).

Exemplo 7 - Obter nomes de todos os arquivos Excel em uma pasta

Use o código abaixo para obter os nomes de todos os arquivos do Excel na pasta Teste.

Sub GetAllFileNames () Dim FolderName As String Dim FileName As String FolderName = "C: \ Users \ sumit \ Desktop \ Test \" FileName = Dir (FolderName & "* .xls *") Do While FileName "" Debug.Print FileName FileName = Dir () Loop End Sub

Enquanto a função DIR retorna o nome do primeiro arquivo Excel apenas, uma vez que o estamos chamando novamente no loop, ela percorre todos os arquivos e nos dá os nomes de todos os arquivos Excel.

Espero que você tenha achado este tutorial e os exemplos úteis.

Deixe-me saber sua opinião na seção de comentários.

Você vai ajudar o desenvolvimento do site, compartilhando a página com seus amigos

wave wave wave wave wave