O que é FileSystemObject (FSO) e como usá-lo no VBA Excel?

Índice:

Anonim

O FileSystemObject é usado para trabalhar com pastas e arquivos conectados ao sistema. Podemos usá-lo para acessar arquivos, pastas, drives e fluxos de texto. Ele pode não apenas acessar arquivos, pastas e arquivos de texto, mas também criar. Essas operações não se limitam ao disco rígido do sistema, mas a qualquer dispositivo conectado ao arquivo. Isso significa que você pode acessar pen drives, cd-roms ou drives de rede virtualmente conectados.

Estas são as operações que podemos fazer usando FileSystemObject no VBA:

Para criar, abrir, ler, escrever e excluir arquivos de texto.

Para adicionar, alterar e excluir pastas.

Para iterar por meio de arquivos e pastas.

Para copiar e mover arquivos ou pastas para outros lugares.

Para verificar se um arquivo ou pasta existe no local ou não

Como acessar o FileSystemObject no VBA?

O objeto do sistema de arquivos faz parte da Microsoft Scripting Runtime Library. Para acessar um FileSystemObject, precisamos conectar ou adicionar uma referência ao Biblioteca de tempo de execução de scripts da Microsoft ou Scrrun.dll.

Nota: O FileSystemObject não oferece suporte à operação de arquivos binários porque o Scrrun.dll oferece suporte à criação e manipulação de arquivos usando o objeto TextStream.

Existem dois métodos para criar FileSystemObject no VBA:

1: Criando objeto FSO usando o método CreateObject:

Usando este método, primeiro declaramos um tipo de objeto variável. Em seguida, defina a referência do objeto FSO para essa variável usando CreateObject:

Sub LearnFso () 'Criando a variável de objeto Dim fso As Object' Crie o FileSystemObject usando Criar método de objeto Set fso = CreateObject ("Scripting.FileSystemObject") Debug.Print fso.GetBaseName ("E: \ MTR \ Feb'18 MTR" ) End Sub 

Este método é dinâmico e transferível. Isso significa que, se você estiver compartilhando o código com outros sistemas, esse código funcionará perfeitamente. Não importa qual versão da Microsoft Runtime Scripting você possui.

A única desvantagem é que você não será capaz de ver o intellisense fornecido pelo VBA. Você terá que depender de seu conhecimento para usar todas as propriedades e métodos de FileSystemObject.

2: Criando Objeto FSO Adicionando Referência ao Microsoft Runtime Scripting

Você pode criar diretamente um FileSystemObject no VBA usando a nova palavra-chave. Para isso, você terá que adicionar uma referência ao último Microsoft Scripting Runtime em seu sistema.

Para adicionar a referência, acesse a opção referências no menu de ferramentas. Aqui, encontre a dll do Microsoft Scripting Runtime. Verifique e clique em OK.

Agora você está pronto para criar e usar o objeto FSO.

Sub LearnFso () Dim fso as new FileSystemObject Debug.Print fso.GetBaseName ("E: \ MTR \ Feb'18 MTR") End Sub 

Ou

Sub LearnFso () Dim fso as FileSystemObject Set fso = New FileSystemObject Debug.Print fso.GetBaseName ("E: \ MTR \ Feb'18 MTR") End Sub 

Ambos funcionarão bem.

Uma grande vantagem desse método é que você poderá ver a inteligência do VBA. O VBA mostrará todas as propriedades e métodos do objeto fso. Também dirá que tipo de variáveis ​​aceitará e que tipo de valor retornará.

Se você compartilhar este código com outros sistemas, terá que dizer a eles para adicionar referência ao Scripting Runtime das ferramentas, caso contrário, eles obterão um erro de compilação informando que o tipo definido pelo usuário não está definido. Portanto, é como importar outras linguagens de programação.

Observe que FSO não é uma palavra-chave. Você pode usá-lo como um nome de variável. É apenas uma convenção nomear objeto do sistema de arquivos como fso. É por isso que algumas pessoas confundem com uma palavra-chave.

Ambos os métodos de criação de objetos FSO têm suas vantagens e desvantagens que mencionei ao explicá-los. Portanto, use de acordo com sua necessidade. Neste artigo, usarei o segundo método de criação de FileSystemObject.

Agora que sabemos como criar um FileSystemObject no VBA, vamos usar esse conhecimento para fazer algumas tarefas significativas. Quero dizer, vamos pular para os exemplos.

Exemplo 1: obter toda a subpasta em uma pasta especificada

O primeiro exemplo que veremos é como obter os nomes das subpastas de uma pasta específica.

Sub LearnFso () 'eliminando variáveis ​​que precisaremos Dim fso As FileSystemObject' Variável para o FileSystemObject Dim fdr As Folder 'Variável para a pasta base Dim subfdr As Folder' Variável para as subpastas Dim fdrpath As String 'para armazenar o caminho da base folder 'Inicializando os objetos fdrpath = "D: \ Downloads"' Declarando a pasta Set fso = New FileSystemObject 'Criando o objeto fso Set fdr = fso.GetFolder (fdrpath)' Criando o objeto pasta de determinada pasta 'loop para obter todos os nome das subpastas em For Each subfdr In fdr.SubFolders Debug.Print subfdr.Name Next subfdr End Sub 

Quando você executa o código acima, é isso o que você obtém.

Isso! Essa é a minha pasta de download. Não se concentre nisso.

Como isso funcionou?

Vamos entender em etapas:

1: Diminuir variáveis ​​de que precisaremos

Dim fso As FileSystemObject 'Variável para o FileSystemObject

Dim fdr As Folder 'Variável para a pasta base

Dim subfdr As Folder 'Variável para as subpastas

Primeiro, declaramos todas as variáveis ​​de que precisaremos neste exemplo. A primeira variável é, obviamente, o fso como objeto de sistema de arquivo. As duas variáveis ​​fdr e subfdr são do tipo de pasta. Usaremos o objeto fso para criar um objeto do tipo de arquivo em vez de criar diretamente. o fdrpath Esta variável de uso é usada para manter o caminho da pasta base da qual queremos obter todas as subpastas.

2: Inicializando os objetos

fdrpath = "D: \ Downloads" 'Declarando a pasta

Set fso = New FileSystemObject 'Criando o objeto fso

Set fdr = fso.GetFolder (fdrpath) 'Criando o objeto de pasta de determinada pasta

Nesta etapa, inicializamos todos os objetos que declaramos, exceto subfdr. Observe que inicializamos a variável do arquivo fdr usando o método getFolder dos objetos fso.

O método GetFolder () de FileSystemObject pega o caminho de uma pasta ou diretório como string e retorna o objeto do tipo de arquivo.

3: loop para obter todos os nomes das subpastas no objeto da pasta

Para cada subfdr em fdr.SubFolders

Debug.Print subfdr.Name

Próximo subfdr

Aqui, usamos um for each loop para percorrer cada subpasta no objeto de arquivo fdr. Usamos a propriedade SubFolders do objeto de arquivo para fazer o loop.

Usamos a propriedade name para obter os nomes de cada subpasta. E está feito.

Exemplo 2: Obter todos os caminhos de arquivo em uma pasta e suas subpastas

Para obter todos os caminhos ou nomes totalmente qualificados de todos os arquivos em uma pasta e sua subpasta, precisamos adicionar mais algumas linhas no código do exemplo 1.

Sub LearnFso () Dim fso As FileSystemObject Dim fdr As Folder 'Variável para a pasta base Dim subfdr As Folder' Variável para as subpastas Dim fdrpath As String 'para armazenar o caminho da pasta base Dim fl As File' para armazenar o objeto de arquivo fdrpath = "D: \ downloads" Set fso = New FileSystemObject Set fdr = fso.GetFolder (fdrpath) 'loop para obter todos os nomes das subpastas em For Each subfdr In fdr.SubFolders For each fl Em subfdr.Files' para efetuar loop throgh cada arquivo Debug.Print fl.Path 'obtendo o nome do arquivo Next fl Next subfdr' para obter os arquivos da pasta principal Para cada fl Em fdr.Files Debug.Print fl.Path Next fl End Sub 

O método Folder.Files () é o método que retorna os arquivos em uma subpasta. O método File.Path () retorna o endereço completo do arquivo.

Cada um de nós tem um loop interno para percorrer todos os arquivos na subpasta da pasta principal e seus.

Para obter os arquivos da pasta principal usamos outro loop.

Exemplo 3: Salvar os nomes dos arquivos em um arquivo CSV.

No exemplo anterior, aprendemos como imprimir os caminhos de arquivo de pastas específicas na janela imediata. Neste exemplo, aprenderemos como salvar esses caminhos em um arquivo CSV. Para fazer isso, precisamos apenas adicionar algumas linhas ao código. Veja as linhas de código do bolde abaixo.

Sub LearnFso () Dim fso As FileSystemObject Dim fdr As Folder 'Variável para a pasta base Dim subfdr As Folder' Variável para as subpastas Dim fdrpath As String 'para armazenar o caminho da pasta base Dim fl As File' para armazenar o objeto de arquivo Dim fileList As TextStream 'Um objeto texttream fdrpath = "D: \ downloads" Set fso = New FileSystemObject Set fdr = fso.GetFolder (fdrpath) Set fileList = fso.CreateTextFile (fdrpath & "\ Lista de arquivos nesta pasta.csv", Verdadeiro, False) 'loop para obter todos os nomes das subpastas em For Each subfdr In fdr.SubFolders For Each fl In subfdr.Files' para percorrer cada arquivo fileList.Write fl.Path & "," Next fl Next subfdr 'para obter o arquivos da pasta principal para cada fl Em fdr.Files fileList.Write fl.Path & "," Next fl fileList.Close End Sub 

Aqui, declaramos um novo objeto do tipo FileStream denominado fileList

Inicializamos a variável filelist com um objeto filestream usando a linha abaixo.

Defina fileList = fso.CreateTextFile (fdrpath & "\ Lista de arquivos nesta pasta.csv", True, False)

Usamos o método CreateTextFile de FSO para criar um objeto FileStream. Ele cria um arquivo de texto. Este método aceita o nome de um arquivo com um caminho completo. A primeira variável está fazendo isso. Usamos a extensão .csv para criar um arquivo csv. A segunda variável é usada para permitir a substituição. O terceiro argumento é False para declarar que não é um arquivo binário.

Nos loops, substituímos o método debug.print pelo método filelist.Write para gravar cada caminho de arquivo no arquivo criado.

Então sim pessoal, é assim que você pode usar o FileSystemObject. O FSO pode ser usado para muitas outras coisas, que discutiremos nos próximos artigos. Se você tiver alguma dúvida sobre este artigo de consulta relacionada ao FSO, pergunte-me na seção de comentários abaixo.

Introdução aos Formulários de Usuário do Excel VBA| Explicarei como criar um formulário no Excel, como usar a caixa de ferramentas VBA, como lidar com as entradas do usuário e, finalmente, como armazenar as entradas do usuário. Percorreremos esses tópicos usando um exemplo e um guia passo a passo.

Variáveis ​​VBA no Excel| VBA significa Visual Basic for Applications. É uma linguagem de programação da Microsoft. É usado com aplicativos do Microsoft Office, como MSExcel, MS-Word e MS-Access, enquanto as variáveis ​​VBA são palavras-chave específicas.

Escopo de Variável Excel VBA| Em todas as linguagens de programação, temos especificadores de acesso à variável que definem de onde uma variável definida pode ser acessada. O Excel VBA não é exceção. O VBA também tem especificadores de escopo.

Argumentos ByRef e ByVal | Quando um argumento é passado como um argumento ByRef para uma subfunção ou função diferente, a referência da variável real é enviada. Quaisquer alterações feitas na cópia da variável, serão refletidas no argumento original.

Exclua planilhas sem prompts de confirmação usando VBA no Microsoft Excel | Como está excluindo planilhas usando o VBA, você sabe o que está fazendo. Você gostaria de dizer ao Excel para não mostrar este aviso e excluir a maldita planilha.

Adicionar e salvar uma nova pasta de trabalho usando VBA no Microsoft Excel 2016| Neste código, primeiro criamos uma referência a um objeto de pasta de trabalho. E então o inicializamos com um novo objeto de pasta de trabalho. A vantagem dessa abordagem é que você pode realizar operações nesta nova pasta de trabalho facilmente. Como salvar, fechar, excluir, etc.

Exibir uma mensagem na barra de status do Excel VBA| A barra de status no Excel pode ser usada como um monitor de código. Quando seu código VBA é longo e você executa várias tarefas usando o VBA, geralmente desativa a atualização da tela para não ver a tela piscando.

Desativar mensagens de aviso usando VBA no Microsoft Excel 2016| Este código não apenas desabilita alertas VBA, mas também aumenta a eficiência de tempo do código. Vamos ver como.

Artigos populares:

50 atalhos do Excel para aumentar sua produtividade | Torne sua tarefa mais rápida. Esses 50 atalhos farão você trabalhar ainda mais rápido no Excel.

A função VLOOKUP no Excel | Esta é uma das funções mais usadas e populares do Excel, que é usada para pesquisar valores em diferentes intervalos e planilhas.

CONT.SE no Excel 2016 | Conte valores com condições usando esta função incrível. Você não precisa filtrar seus dados para contar valores específicos. A função Countif é essencial para preparar seu painel.

Como usar a função SUMIF no Excel | Esta é outra função essencial do painel. Isso ajuda você a somar valores em condições específicas.