Este post foi originalmente publicado em http://officevbavsto.blogspot.com/2012/02/reexibindo-pastas-ocultas-com-o-excel.html

Neste post, eu descrevo como utilizar a classe FileSystemObject, que provê acesso ao sistema de arquivos do computador [1]. O FileSystemObject permite você acessar qualquer objeto no sistema de arquivos do computador, incluindo Drives, Pastas e Arquivos [2].

Primeiro, adicione a referência Microsoft Scripting Runtime no seu projeto VBA.

Para utilizar o FileSystemObject e todos os objetos do sistema de arquivos, você deve primeiro declarar e criar uma instância desta classe [2]:

Sub ReexibePastasOcultas()

  Dim objFSO As FileSystemObject
  Set objFSO = New FileSystemObject

End Sub

Agora, vamos declarar duas variáveis do tipo Folder. A classe Folder provê acesso às propriedades de uma pasta do computador. Ela contém métodos para criar, excluir, copiar e mover pastas [3].

Em seguida utilizaremos o método GetFolder da classe FileSystemObject. O método GetFolder retorna um objeto Folder correspondente à pasta especificada na chamada deste método [4].

Sub ReexibePastasOcultas()

  Dim objFSO As FileSystemObject
  Set objFSO = New FileSystemObject 
  
  Dim objFld As Folder
  Dim iFld As Folder 
  
  Set objFld = objFSO.GetFolder("c:\Root") 

End Sub

Após isto, vamos iterar entre a coleção de subpastas dentro da pasta “c:\Root”. Para isto utilizaremos a propriedade SubFolders do objeto Folder.

A propriedade SubFolders retorna uma coleção de Folders dentro de uma pasta especifica (ou seja, Subpastas), inclusive aquelas que forem ocultas ou de sistema [5].

Sub ReexibePastasOcultas()

  Dim objFSO As FileSystemObject
  Set objFSO = New FileSystemObject
  
  Dim objFld As Folder
  Dim iFld As Folder
  
  Set objFld = objFSO.GetFolder("c:\Root")
  
  For Each iFld In objFld.SubFolders
  
  Next iFld

End Sub

E finalmente, mudamos os atributos das subpastas utilizando a propriedade Attributes.

Alguns dos valores possíveis de atribuir na propriedade Attributes são os do enumerador FileAttribute conforme a seguir [6]:

NomeDescrição
ArchiveAs aplicações usam este atributo para marcar pastas para backup ou remoção.
CompressedA pasta é compactada.
DirectoryA pasta é um diretório.
HiddenA pasta é oculta.
NormalA pasta é normal e não possui nenhum outro atributo definido. Este atributo é valido apenas se utilizado sozinho.
ReadOnlyA pasta é somente leitura
SystemA pasta é uma pasta de sistema, isto é, a pasta é parte do sistema operacional ou é usado exclusivamente pelo sistema operacional.

Vamos ao código:

Sub ReexibePastasOcultas()

  Dim objFSO As FileSystemObject
  Set objFSO = New FileSystemObject
  
  Dim objFld As Folder
  Dim iFld As Folder
  
  Set objFld = objFSO.GetFolder("c:\Root")
  
  For Each iFld In objFld.SubFolders
  iFld.Attributes = Directory
  'iFld.Attributes = Hidden
  'iFld.Attributes = ReadOnly
  Next iFld

End Sub

Créditos

Photo by Pixabay from Pexels

Referência Bibliográfica