Views

...

Important:

Quaisquer soluções e/ou desenvolvimento de aplicações pessoais, ou da empresa, que não constem neste Blog podem ser tratados como consultoria freelance.

E-mails

Deixe seu e-mail para receber atualizações...

eBook Promo

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



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

eBooks VBA na AMAZOM.com.br

LinkWithinBrazilVBAExcelSpecialist

Related Posts Plugin for WordPress, Blogger...

Vitrine