Como exibir pastas ocultas usando VBA
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].

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]:
Nome | Descrição |
---|---|
Archive | As aplicações usam este atributo para marcar pastas para backup ou remoção. |
Compressed | A pasta é compactada. |
Directory | A pasta é um diretório. |
Hidden | A pasta é oculta. |
Normal | A pasta é normal e não possui nenhum outro atributo definido. Este atributo é valido apenas se utilizado sozinho. |
ReadOnly | A pasta é somente leitura |
System | A 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
Referência Bibliográfica
- "FileSystemObject Object." MSDN – the Microsoft Developer Network. http://msdn.microsoft.com/en-us/library/office/gg278516.aspx (accessed April 27, 2013);
- Getz, Ken. VBA Developer's Handbook. 2. ed. Hoboken: John Wiley & Sons, 2006;
- Birnbaum, Duane, and Greg M. Perry. Microsoft Excel VBA professional projects. Boston, Mass.: Premier Press, 2003;
- "GetFolder Method." MSDN – the Microsoft Developer Network. http://msdn.microsoft.com/en-us/library/f1xtf7ta(v=vs.84).aspx (accessed April 27, 2013);
- "SubFolders Property." MSDN – the Microsoft Developer Network. http://msdn.microsoft.com/en-us/library/office/gg251693.aspx (accessed April 27, 2013);
- "FileAttributes Enumeration." MSDN – the Microsoft Developer Network. http://msdn.microsoft.com/en-us/library/system.io.fileattributes(v=vs.71).aspx (accessed April 27, 2013).