FileSystemObject também chamado FSO, fornece um modelo fácil baseado em objetos para acessar o sistema de arquivos de um computador. Você simplesmente tem que criar uma instância do FileSystemObject em VBA e então você pode gerar arquivos, ler arquivos, excluir arquivos, iterar através de pastas e fazer muitas outras operações no sistema de arquivos do seu computador.
O FileSystemObject está presente dentro da Biblioteca de Tempo de Execução do Microsoft Scripting, ou seja, Scrrun.dll
. Esta DLL suporta a criação e manipulação de ficheiros usando o objecto TextStream e esta é a razão pela qual o FSO não suporta a operação em ficheiros binários.
Tabela de conteúdo
Usos do objeto File System Object
FileSystemObject pode ser usado para várias tarefas como:
- Criar, abrir, ler, escrever e excluir arquivos de texto.
- Criar, alterar e excluir pastas.
- Iterar arquivos e pastas.
- Copiar e mover arquivos ou pastas.
- Verificando se um local (caminho do arquivo) existe ou não.
Acesso ao FileSystemObject
O FileSystemObject compreende várias coleções de objetos e cada uma dessas coleções de objetos contém informações sobre um aspecto específico do sistema de arquivos. Estas colecções são:
Objecto | Descrição |
---|---|
Drive | Este objecto permite-lhe obter informações acerca de uma unidade ligada ao seu sistema. Por exemplo, ele pode dizer-lhe o espaço disponível em um drive, seu nome lógico, etc. Note que o objecto da unidade a que nos referimos aqui não significa necessariamente o disco rígido, pode ser um CD-ROM, uma unidade Flash, RAM ou mesmo uma unidade ligada logicamente via LAN. |
Pasta | Este objecto permite-lhe criar, apagar, mover ou consultar uma hierarquia de pastas. |
Arquivo | Este objecto permite-lhe criar, apagar, mover ou consultar um Ficheiro. |
TextStream | O objectoTextStream permite-lhe ler ou escrever ficheiros de texto. |
Então, esquematicamente um objecto FileSystemObject pode ser mostrado como:
Por favor note que o FSO comunica indirectamente com a maioria dos objectos acima referidos. Ele apenas contém diretamente a coleção de objetos para “Drives”. Cada objeto “Drive” da coleção “Drives” contém uma cadeia de objetos “Folder”. E cada objeto “Pasta” contém uma coleção “Arquivo”.
Para torná-la mais significativa, digamos desta forma: Um objeto FileSystemObject contém três métodos principais para buscar (ler) informações específicas sobre Drives, Folders ou Files, estes métodos são GetDrive
, GetFolder
e GetFile
respectivamente. Agora vamos dizer que você precisa encontrar o tamanho do arquivo de um determinado arquivo, então você vai criar uma instância do método GetFile
e então buscar seu size
property.
Note: GetDrive
, GetFolder
and GetFile
não são os únicos métodos dentro do FSO, eu acabei de usá-los para explicar as coisas. Na seção abaixo vamos ver todos os métodos contidos dentro do FileSystemObject.
Métodos FSO
A tabela abaixo dá detalhes sobre vários métodos do FileObjectSystem e as tarefas que eles executam:
Método | Descrição |
---|---|
GetDrive, GetFolder, e GetFile | Estes métodos são usados para obter informações sobre Drive, Folders, e Files respectivamente. |
CriarPasta e CriarArquivo de Texto | Ajuda na criação de novas pastas ou arquivos. |
DeleteFile e DeleteFolder | Ajuda na eliminação de arquivos ou pastas existentes. |
CopyFile and CopyFolder | Estes métodos ajudam a copiar ficheiros ou pastas de um local para outro. |
MoveFile and MoveFolder | Estes métodos ajudam a mover arquivos ou pastas de um local para outro. |
Criar um Objeto FileSystemObject em VBA: Nesta seção, vamos lidar com duas coisas:
- Criar uma referência da Microsoft Scripting Runtime Library i.e. Scrrun.dll
- Criar um Objeto FSO.
Criar uma referência da Biblioteca em Tempo de Execução do Microsoft Scripting
Para criar uma referência da Biblioteca em Tempo de Execução do Microsoft Scripting siga os passos abaixo:
- Primeiro de tudo, abra o editor VBA pressionando “Alt + F11”.
- Próximo, navegue para “Ferramentas” > “Referência” como mostrado acima.
- Isto abrirá uma janela de referência. Aqui seleccione e verifique a entrada “Microsoft Scripting Runtime” e clique em “OK”.
- Agora a referência à Biblioteca em Tempo de Execução do Microsoft Scripting foi adicionada.
Criar um objecto FSO
Criar um objecto FSO é simples, siga os passos abaixo para o fazer:
- No editor VBA navegue para “Insert” > “Module”.
- Agora na janela do módulo digite “
Public FSO As New FileSystemObject
“. - Isto irá criar um objeto do FileSystemObject com o nome FSO.
Após isto, você pode simplesmente acessar os métodos do FileSystemObject usando o objeto FSO.
6 Exemplos práticos de acesso ao FileSystemObject
Agora vamos a alguns exemplos práticos de FSO:
Exemplo 1: Use FSO para encontrar o espaço livre total de um drive.
Below é o código para fazer isto:
'Criar um FileSystemObject
Public FSO As New FileSystemObject
Sub DiskSpace()
Dim drv As Drive
Dim Space As Double
Set drv = FSO.GetDrive("C:") 'Criar o Drive
Espaço de Objeto = drv.FreeSpace
Espaço = Espaço / 1073741824 'convertendo bytes para GB
Espaço = PlanilhaFunção.Round(Espaço, 2) 'Arredondamento
MsgBox "C: tem espaço livre = " & Espaço & " GB"
End Sub
Explicação: Neste código primeiro criamos um objeto Drive usando o método ‘GetDrive
‘ e depois usamos sua propriedade ‘
FreeSpace
‘ para buscar o espaço livre.
Finalmente, exibimos o espaço livre usando uma caixa de mensagem.
Note que existem duas propriedades para buscar o espaço livre de um drive i.e. drv.FreeSpace
e drv.AvailableSpace
.
Exemplo 2: Verifique se uma pasta existe ou não. Se a pasta não existir, então crie essa pasta.
Below é o código:
'Creating a FileSystemObject
Public FSO As New FileSystemObject
Sub ChkFolder()
Dim Fldr_name As String
Fldr_name = InputBox("Digite o caminho da pasta para verificar :")
Se Len(Fldr_name) > 0
Então se FSO.FolderExists(Fldr_name) = True Then
MsgBox "Folder Exists!" (Pasta existe!)
Else FSO.CreateFolder (Fldr_name)
MsgBox ("Folder Created!")
End If Else MsgBox "Wrong Input"
End If
End Sub
Explicação: No código, temos usado uma função InputBox para obter o caminho da pasta do usuário. Depois disso, usando a instrução If junto com FolderExists
o método, verificamos se essa pasta está presente ou não. Se a pasta não estiver presente, então criamos essa pasta usando a instrução CreateFolder
method.
Note: CreateFolder
method irá criar apenas uma pasta de cada vez. Então, se você fornecer um argumento “C:\Folder1\Folder2\Folder3” a ele, então ele só criará a Folder3 dentro da Folder2. Mas se a Pasta2 não existir, então ele irá lançar um caminho que não encontrou um erro.
Exemplo 3: Escreva um código usando FSO para copiar uma pasta de um local para outro.
Below é o código para realizar isto:
‘Creating a FileSystemObject Public FSO As New FileSystemObject Sub CopyFolder() FSO.CopyFolder “C:\Source-Folder\”, “D:\Destination-Folder\”, True MsgBox “Copying Done! Fim Sub
Explicação: No código, usamos o método CopyFolder
method do FSO, este método aceita três argumentos:
- Caminho de Origem
- Caminho de Destino
- Um argumento booleano para especificar Overwrite Existing.
Exemplo 4: Usando o FileSystemObject vá buscar o diretório Temp, a pasta System, e a pasta Windows.
Para fazer isso podemos usar o código abaixo:
'Criar um FileSystemObject
Public FSO As New FileSystemObject
Sub GetFolderpath()
Dim Windows_Fldr As String
Dim System_Fldr As String
Dim Temp_Fldr As String
Windows_Fldr = FSO.GetSpecialFolder(0)
System_Fldr = FSO. GetSpecialFolder(1)
Temp_Fldr = FSO.GetSpecialFolder(2)
MsgBox ("Windows folder path = " & Windows_Fldr & vbNewLine & _"System folder path = " & System_Fldr & vbNewLine & _"Temp folder path = " & Temp_Fldr)
End Sub
>Explicação: No código, utilizamos o método GetSpecialFolder
method de FSO, este método aceita um único argumento numérico i.e. 0-2.
-
FSO.GetSpecialFolder(0)
– Busca o caminho do Folder do Windows. -
FSO.GetSpecialFolder(1)
– Busca o caminho do Folder do Sistema. -
FSO.GetSpecialFolder(2)
– Traz o caminho da pasta Local Temporary.
Exemplo 5: Cria um ficheiro de texto, escreve algum conteúdo nele, depois lê o ficheiro, e finalmente apaga o ficheiro.
Below é o código para realizar isto:
'Criando um FileSystemObject Public
FSO As New FileSystemObject
Sub CreateFile()
Dim txtstr As TextStream
Dim FileName As String
Dim FileContent As String
Dim File As File
FileName = "C:\TestDirectory\File.txt" 'File to be created
'Criar um arquivo e escrever conteúdo nele
FileContent = InputBox("Enter the File Content")
If Len(FileContent) > 0 Then
Set txtstr = FSO.CreateTextFile(FileName, True, True)
txtstr.Write FileContent
txtstr.Close
End If
' Leitura do ficheiro que acabámos de criar
If FSO.FileExists(FileName) Then
Set File = FSO.GetFile(FileName)
Set txtstr = File.OpenAsTextStream(ForReading, TristateUseDefault)
MsgBox txtstr.ReadAll txtstr.Close
' Finalmente Apagar o ficheiro
File.Delete (True)
End If
End Sub
Explicação: Este código primeiro cria um arquivo texto, adiciona conteúdo a ele, depois o lê, o exibe usando uma caixa de mensagem, e finalmente exclui aquele arquivo.
Example 6: Escreve um código VBA que pode iterar todos os arquivos presentes dentro de uma pasta e também busca seu tamanho e data modificada.
O seguinte código pode realizar esta tarefa:
'Criando um FileSystemObject
Public FSO As New FileSystemObject
Sub ListFiles()
'Declarando variáveis
Dim objFolder As Folder
Dim objFile As File
Dim strPath As String
Dim NextRow As Long
'Especifique o caminho da pasta
strPath = "C:Usás\\Aniee\Desktop\ExcelTrick\ "
'Criar o objecto desta pasta
Configurar objFolder = FSO.GetFolder(strPath)
'Verificar se a pasta está vazia ou não
Se objFolder.Files.Count = 0 Then
MsgBox "No files were found...", vbExclamation
Exit Sub
End If
'Adding Column names for A, B, and C
Cells(1, "A").Valor = "Nome do ficheiro"
Cells(1, "B").Valor = "Tamanho"
Cells(1, "C").Valor = "Data/hora modificada"
'Encontrar a próxima linha disponível
NextRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Fila + 1
'Passe em loop por cada arquivo na pasta
Para cada objFile In objFolder.Files
'Listar o nome, tamanho e data/hora do arquivo atual
Células(NextRow, 1).Value = objFile.Nome
Células(NextRow, 2).Value = objFile.Size
Células(NextRow, 3).Value = objFile.DateLastModified
'Encontrar a próxima linha NextRow = NextRow + 1
Nextro objFile
End Sub