VBA Tips - Retornando arquivos dentro de um diretório - Returning Files from the File System - Scripting Runtime object library - Scrrun.dll

Termo de Responsabilidade 


Como fazemos para saber quantos arquivos tem no ambiente em que estamos trabalhando?

Depois de criar uma nova instância do FileSystemObject, pode usá-lo para trabalhar com unidades, pastas e arquivos no sistema de arquivos.

O procedimento a seguir retorna os arquivos em uma pasta específica em um objeto Dictionary. O procedimento GetFiles recebe três argumentos: 

O caminho para o diretório, 

Um objeto Dictionary, e

Um argumento booleano opcional que especifica se o procedimento deve ser chamado recursivamente. 

Retornando um valor booleano que indica se o procedimento foi bem sucedido.

O primeiro procedimento usa o método GetFolder para retornar uma referência a um objeto Folder. Em seguida, percorre a coleção de arquivos da pasta e adiciona o caminho e o nome do arquivo para cada arquivo no objeto Dictionary. Se o argumento blnRecursive estiver definido como True, o procedimento é chamado recursivamente, GetFiles para retornar os arquivos em cada subpasta.

Adicione uma referência a Scripting Runtime object library no seu projeto VBA.

Ao instalar as aplicações do MS Office, uma das bibliotecas de objetos instalados no seu sistema é o Scripting Runtime object library. Esta biblioteca contém objetos úteis a partir de qualquer VBA ou script, e por isso é fornecido como uma biblioteca separada.

Os objetos na Scripting Runtime object library facilitam o acesso ao sistema de arquivos, e torna a leitura e gravação num arquivo texto muito mais simples.

Por padrão, nenhuma referência é definido para esta biblioteca, então você deve definir uma referência para que você possa usá-lo. Se o Scripting Runtime object library não aparecer na caixa de diálogo de Referências (menu Ferramentas), você deve ser capaz de encontrá-la na subpasta C:\Windows\System\Scrrun.dll.


Utilize o código abaixo:


Function GetFiles (strPath As String, dctDict As Dictionary, Optional blnRecursive As Boolean) As Boolean            

   ' Esta função retorna todos os arquivos que estiverem dentro de um diretório

   ' como um objeto Dictionary. Se efetuarmos a chamada recursivamente, este retornará

   ' todos os arquivos nas subpastas.

   

   Dim fsoSysObj      As FileSystemObject

   Dim fdrFolder      As Folder

   Dim fdrSubFolder   As Folder

   Dim filFile        As File

   

   ' Retorna um novo FileSystemObject.

   Set fsoSysObj = New FileSystemObject

   

   On Error Resume Next


   ' Obtém a pasta.

   Set fdrFolder = fsoSysObj.GetFolder(strPath)

   If Err <> 0 Then

      ' Incorrect path.

      GetFiles = False

      GoTo GetFiles_End

   End If

   On Error GoTo 0

   

   ' Efetua o Loop através da coleção de arquivos, adicionando-os ao dictionary.

   For Each filFile In fdrFolder.Files

      dctDict.Add filFile.Path, filFile.Path

   Next filFile



   ' Se o flag Recursivo for true, executa recursivamente.

   If blnRecursive Then

      For Each fdrSubFolder In fdrFolder.SubFolders

         GetFiles fdrSubFolder.Path, dctDict, True

      Next fdrSubFolder

   End If



   ' Retorna True se não ocorrer nenhum erro.

   GetFiles = True

   

GetFiles_End:

   Exit Function

End Function


Você pode usar a seguinte função para testar o procedimento GetFiles. Esta cria um novo objeto Dictionary e passa para o procedimento GetFiles.


Sub TestGetFiles()
   ' Call to test GetFiles function.

   Dim dctDict As Dictionary
   Dim varItem As Variant
   
   ' Create new dictionary.
   Set dctDict = New Dictionary
   ' Call recursively, return files into Dictionary object.
   If GetFiles(GetTempDir, dctDict, True) Then
      ' Print items in dictionary.
      For Each varItem In dctDict
         Debug.Print varItem
      Next
   End If
End Sub



Você também pode usar o objeto FileSearch, para encontrar um arquivo ou grupo de arquivos. O objeto FileSearch tem certas vantagens em que você pode pesquisar subpastas, para um determinado tipo de arquivo, ou pesquisar o conteúdo de um arquivo, basta definir algumas propriedades.

Por outro lado, a Scripting Runtime object library permite que trabalhe com arquivos individuais ou pastas como objetos que têm seus próprios métodos e propriedades. Por exemplo, o procedimento ChangeFileAttributes, altera atributos de arquivo, definindo a propriedade de atributos para cada objeto de arquivo na coleção de arquivos de um objeto de pasta particular.

Tags: VBA, Tips, files, directory, folder, Scripting Runtime object library, Scrrun.dll, FileSystemObject, GetFiles

André Luiz Bernardes

Nenhum comentário:

Postar um comentário

diHITT - Notícias