VBA – Gravar em arquivo de texto
In this Article
Este tutorial demonstrará como gravar em arquivos de texto usando o VBA.
Gravação em um Arquivo de Texto
Os códigos abaixo usam o FileSystemObject (saiba mais). Para usá-lo, você precisará definir uma referência à biblioteca de tempo de execução do script VB.
Gravar em um Novo Arquivo de Texto
Com o comando CreateTextFile de FileSystemObject, você pode criar e adicionar conteúdo a um arquivo de texto:
Sub FSOCriarGravarEmArquivoTexto()
Dim FSO As New FileSystemObject
Set FSO = CreateObject("Scripting.FileSystemObject")
Set FileToCreate = FSO.CreateTextFile("C:\Test\TestFile.txt")
FileToCreate.Write "linha teste"
FileToCreate.Close
End Sub
Observe que o conteúdo não será colocado entre aspas.
Gravação em Arquivo de Texto Existente
Para gravar em um arquivo de texto existente, você pode usar o comando OpenTextFile do FileSystemObject com o modo ForWriting.
Sub FSOGravarEmArquivoTexto()
Dim FSO As New FileSystemObject
Set FSO = CreateObject("Scripting.FileSystemObject")
Set FileToWrite = FSO.OpenTextFile("C:\Test\TestFile.txt", ForWriting)
FileToWrite.Write "linha teste"
FileToWrite.Close
End Sub
Observe que você não precisa necessariamente do FileSystemObject para gravar em um arquivo de texto existente. O exemplo acima é mostrado de outra forma no código abaixo (veja outro exemplo na seção Intervalo de Dados para Arquivo de Texto):
Sub GravarEmArquivoTexto()
Dim FileName As String
FileName = "C:\Test\TestFile.txt"
Open FileName For Output As #1
Print #1, "linha teste"
Close #1
End Sub
Observe que o uso do comando Write em vez de Print fará com que o conteúdo adicionado seja colocado entre aspas. Ter os dois comandos em sua macro
Write #1, "linha teste #1"
Print #1, "linha teste #2"
resultará em um arquivo de texto como este:
Adicionar ao Arquivo de Texto
Ao alterar o modo no código acima para ForAppending, uma linha pode ser adicionada ao final do arquivo de texto:
Set FileToWrite = FSO.OpenTextFile("C:\Test\TestFile.txt", ForAppending)
Método WriteLine
Esse método acrescenta a sequência de caracteres de entrada como uma linha separada ao conteúdo existente.
Método Write
A sequência de caracteres de entrada é anexada na mesma linha que o conteúdo existente.
WriteBlankLines
Esse método usa como parâmetro o número de linhas em branco a serem gravadas no arquivo de texto.
O código abaixo ilustra a diferença entre os diferentes métodos de gravação:
Sub MetodosWrite()
Dim FSO As New FileSystemObject
Set FSO = CreateObject("Scripting.FileSystemObject")
Set FileToWrite = FSO.OpenTextFile("C:\Test\TestFile.txt", ForAppending)
FileToWrite.Write "linha teste #1 "
FileToWrite.Write "linha teste #2"
FileToWrite.WriteBlankLines (3)
FileToWrite.WriteLine "linha teste #3"
FileToWrite.WriteLine "linha teste #4"
FileToWrite.Close
End Sub
E o resultado:
Intervalo de Dados em Arquivo de Texto
Se quiser enviar um intervalo de dados da planilha para um arquivo de texto, você pode usar este código:
Sub SaidaParaArquivoTexto()
Dim FileName As String, LineText As String
Dim MyRange As Range, i, j
FileName = "C:\Test\TestFile.txt" 'você pode especificar aqui o nome do arquivo de texto que deseja criar
Open FileName For Output As #1
Set MyRange = Range("data") 'ele pressupõe que você tenha um intervalo de dados chamado "data" em sua planilha
For i = 1 To MyRange.Rows.Count
For j = 1 To MyRange.Columns.Count
LineText = IIf(j = 1, "", LineText & ",") & MyRange.Cells(i, j) 'o arquivo de texto criado terá um separador de vírgula
Next j
Print #1, LineText 'O uso do comando Write em vez de Print fará com que seus dados fiquem entre aspas no arquivo de texto de saída
Next i
Close #1
End Sub
Matriz para Arquivo de Texto
Também é possível salvar a matriz de dados em um arquivo de texto da seguinte forma:
Sub SalvarMatrizParaArquivoTexto()
Dim MyArray As Variant
Dim FSO As New FileSystemObject
Set FSO = CreateObject("Scripting.FileSystemObject")
MyArray = Array(Array("00", "01"), Array("10", "11"), Array("20", "21"))
Set FileToCreate = FSO.CreateTextFile("C:\Test\TestFile.txt")
For n = 0 To UBound(MyArray)
FileToCreate.WriteLine MyArray(n)(0) & "," & MyArray(n)(1)
Next
FileToCreate.Close
End Sub