Arquivos de texto são uma fonte comum para para armazenar e transportar informações.
Neste tópico será abordado acesso, principais funções e maneiras de importar e exportar estes dados com VBA.
Para realizar tarefas com um arquivo de texto no VBA é preciso, primeiramente, acessá-lo. Faremos isso através da instrução Open.
Open exige parâmetros para:
Open LocaldoArquivo For Modo As #NumerodoArquivo
Cada um destes parâmetros será detalhado a seguir.
Pode-se atribuir o local do arquivo de duas formas:
LocaldoArquivo = "C:\teste\banco-de-dados.txt" 'Diretamente pelo caminho das pastas
LocaldoArquivo = Application.GetOpenFilename() 'Através da caixa de diálogo selecionando o arquivo
A primeira forma é utilizada quando o caminho não altera constantemente. Já a segunda dá a liberdade, a cada execução, para se escolher um caminho diferente.
Ambas as formas resultarão em LocaldoArquivo associada a uma String do local do arquivo.
O modo de acesso deve ser substituído por um dos seguintes comandos:
Output - Utilizado para gravar conteúdo do Excel para o arquivo de texto (substituindo um antigo, caso existir)
Input - Utilizado para ler o arquivo Append - Utilizado para adicionar conteúdo a um arquivo (sem substituí-lo, caso existir) Binary - Utilizado para ler e gravar dados em formato de byte Random - Utilizado para colocar caracteres de um tamanho definidoO foco deste tutorial será apenas em: Input (importar) e Output (exportar).
Cada arquivo aberto no VBA deve ser associado a um número entre 1 e 511 precedido de hashtag #. Normalmente se inicia no #1 e segue sucessivamente para #2, #3, etc.
Utilize a função FreeFile() para obter o próximo número de arquivo disponível. Se nenhum estiver em uso, FreeFile() retornará 1.
O código a seguir acessará o arquivo que for selecionado com Application.GetOpenFilename()
Sub TesteOpen()
Dim LocalArquivo As String
LocalArquivo = Application.GetOpenFilename()
'Abre a caixa de diálogo para selecionar o arquivo
'Repare que LocaldoArquivo será uma String de caminho E.g. "C:\..."
Dim NumArquivo As Integer
NumArquivo = FreeFile() 'Atribui o primeiro número de arquivo disponível (E.g.: #1)
Open LocalArquivo For Input As #NumArquivo
Close #NumArquivo 'Fecha o arquivo (o número em NumArquivo poder ser reutilizado)
End Sub
Apesar do acesso, nenhuma informação foi importada ou exportada. Para realizarmos estas ações, precisaremos do auxílio das funções Input e Output respectivamente.
Para importar conteúdo de um arquivo de texto para o Excel utilizaremos um arquivo exemplo chamado "banco-de-dados.txt" e a função Input:
Sub ImportarSimples()
Dim LocalArquivo As String
LocalArquivo = Application.GetOpenFilename()
'Abre a caixa de diálogo para selecionar o arquivo
'Repare que LocaldoArquivo será uma String de caminho Ex. "C:\...\banco-de-dados.txt"
Dim NumArquivo As Integer
Open LocalArquivo For Input As #1 'Arquivo será associado ao #1
PrimeiroCaractere = Input(1, #1) 'Coleta 1 caractere do arquivo #1
SegundoCaractere = Input(1, #1) 'Coleta mais 1 caractere, sendo este o próximo (o 2° neste caso)
MsgBox PrimeiroCaractere
MsgBox SegundoCaractere
Close #1 'Fecha o arquivo (para o número #1 poder ser reutilizado)
End Sub
Para coletar todos os caracteres de uma só vez podemos utilizar a função LOF:
Sub ImportarLOF()
Dim LocalArquivo As String
LocalArquivo = Application.GetOpenFilename()
'Abre a caixa de diálogo para selecionar o arquivo
'Repare que LocaldoArquivo será uma String de caminho E.g. "C:\..."
Dim NumArquivo As Integer
Open LocalArquivo For Input As #1 'Arquivo será associado ao #1
MsgBox LOF(1) 'Quantidade total de caracteres do arquivo #1
TodosCaracteres = Input(LOF(1), #1) 'Coleta todos caractere do arquivo #1
MsgBox TodosCaracteres
Close #1 'Fecha o arquivo (para o número #1 poder ser reutilizado)
End Sub
LOF retorna o número de bytes do arquivo aberto com Open. Como se trata de um arquivo de texto, cada byte é correspondente a um caractere. Sendo assim, o número de bytes será igual ao número de caracteres.
Para importar os dados para planilha podemos utilizar o código a seguir:
Sub ImportarTexto ()
Dim LocaldoArquivo As String
Dim NumArquivo As Integer
Dim Dadosdetexto As String
Dim QuebraLinha as Variant
Dim UltLinha as Integer
Dim PrimLinha as Integer
'Abre a caixa de diálogo para selecionar o arquivo
LocaldoArquivo = Application.GetOpenFilename()
'Ou indique um caminho com LocaldoArquivo = "C:\LOCAL_DO_ARQUIVO\banco-de-dados.txt"
NumArquivo = FreeFile() ' Atribui o primeiro número de arquivo disponível (E.g.: #1)
Open LocaldoArquivo For Input As #NumArquivo 'Abre o arquivo em modo de leitura
'Passar o Conteúdo para Planilha---
Dadosdetexto = Input(LOF(NumArquivo), NumArquivo) 'Carrega todo conteúdo do arquivo na variável
QuebraLinha = Split(Dadosdetexto, vbCrLf) 'Cria um vetor com cada linha do arquivo
UltLinha = UBound(QuebraLinha) 'Determina a última linha do vetor
PrimLinha = LBound(QuebraLinha) 'Determina a primeira linha do vetor
'Transpõem os vetores para a planilha
Range("A1").Resize((UltLinha) - (PrimLinha) + 1).Value = Application.Transpose(QuebraLinha)
'----------------------------------
Close #NumArquivo 'Fecha o arquivo (para o número em NumArquivo poder ser reutilizado)
End Sub
vbCrLf é referente ao caractere não visível CrLf que indica quebra de linha do arquivo.
Função | Descrição |
---|---|
FreeFile | Retorna o próximo número disponível para a declaração Open. Importante ao trabalhar com múltiplos arquivos. |
BOF | Retorna True caso esteja no começo do arquivo definido com #número. |
EOF | Retorna True caso tenha terminado a leitura do arquivo definido com #número. |
LOF | Retorna o tamanho em bytes do arquivo definido com #número. |
Loc | Retorna a posição atual de leitura e escrita para a declaração Open. |
BOF e EOF auxiliam na construção de Loops quando se deseja trabalhar caractere por caractere, ou linha por linha.
Caractere por caractere
'Coletar de um em um
Caracteres = Input(1, #1) 'Coleta 1 caractere do arquivo #1
Caracteres = Caracteres & Input(1, #1) 'Coleta mais 1 caractere, sendo este o próximo
Caracteres = Caracteres & Input(1, #1) 'Coleta mais 1 caractere, sendo este o próximo
'...
Loop com auxílio do EOF
'Loop com auxílio de EOF
Caracteres = ""
Do While Not EOF(1)
Caracteres = Caracteres & Input(1, #1)
Loop
Loop com auxílio do BOF
'Uma outra forma com BOF
Do While BOF(1)
Caracteres = Caracteres & Input(1, #1)
Loop
Para exportar conteúdo da planilha para um arquivo de texto:
Sub ExportarTexto()
Dim Ultlinha As Long
Dim UltColuna As Long
Dim NovoArquivo As String
Dim NumArquivo As Integer
Dim DadoCell As Variant
NumArquivo = FreeFile ' Atribui o primeiro número de arquivo disponível (E.g.: #1)
'Determina a última linha da planilha com dados
Ultlinha = Cells(Rows.Count, 1).End(xlUp).Row
'Determina a última coluna da planilha com dados
UltColuna = Cells(1, Columns.Count).End(xlToLeft).Column
NovoArquivo = "C:\Teste\Exportado.txt" 'Utilize uma pasta já existente
'Exporta os dados da planilha para o arquivo criado
Open NovoArquivo For Output As #NumArquivo
For i = 1 To Ultlinha
For j = 1 To UltColuna
If j = UltColuna Then
DadoCell = DadoCell & Cells(i, j).Value
Else
DadoCell = DadoCell & Cells(i, j).Value & " "
End If
Next j
Print #NumArquivo, DadoCell
DadoCell = ""
Next i
Close #NumArquivo 'Salva e fecha o arquivo de texto com os dados
End Sub
Caso a pasta que você esteja salvando o arquivo ainda não exista, irá ocorrer um erro.
Um arquivo .csv (Comma Separated Values ou em português: Valores delimitados por vírgula), como o nome sugere, é um arquivo de texto no qual os itens de cada linha estão separados por vírgulas, delimitando o que deve ir em cada coluna.
É um tipo muito comum de arquivo, e como cada linha refere-se, diversas vezes, a múltiplas colunas, pode necessitar um tratamento com auxílio de loops e funções, como BOF e EOF.
Para facilitar a importação, utiliza-se a instrução Line Input (que funciona linha por linha), ao invés de apenas Input (que funciona caractere por caractere).
Sub AbrirTextoCSV()
Dim LocaldoArquivo As String
Dim NumArquivo As Integer
Dim LinhaDoArquivo As String
Dim ItemDaLinha As Variant
Dim UltLinha As Long
'Abre a caixa de diálogo para selecionar o arquivo
LocaldoArquivo = Application.GetOpenFilename()
'Ou indique um caminho Ex: LocaldoArquivo = "C:\teste\banco-de-dados.txt"
NumArquivo = FreeFile ' Atribui o primeiro número de arquivo disponível (Ex: #1)
Open LocaldoArquivo For Input As #NumArquivo 'Abre o arquivo em modo de leitura
Do Until EOF(NumArquivo)
Line Input #NumArquivo, LinhaDoArquivo 'Coleta a linha inteira e associa a LinhaDoArquivo
ItemDaLinha = Split(LinhaDoArquivo, ", ")
i = i + 1
UltLinha = UBound(ItemDaLinha)
For j = 1 To UltLinha + 1
Cells(i, j).Value = ItemDaLinha(j - 1)
Next
Loop
Close #NumArquivo
End Sub
Similar a exportação de texto, porém obrigatório a utilização de ", " na separação dos elementos.
Sub GravarTextoCSV()
Dim Ultlinha As Long
Dim UltColuna As Long
Dim NovoArquivo As String
Dim NumArquivo As Integer
Dim DadoCell As Variant
NumArquivo = FreeFile ' Atribui o primeiro número de arquivo disponível (Ex: #1)
'Determina a última linha da planilha com dados
Ultlinha = Cells(Rows.Count, 1).End(xlUp).Row
'Determina a última coluna da planilha com dados
UltColuna = Cells(1, Columns.Count).End(xlToLeft).Column
NovoArquivo = "C:\Teste\Exportado.csv" 'Utilize uma pasta já existente
'Exporta os dados da planilha para o arquivo criado
Open NovoArquivo For Output As #NumArquivo
For i = 1 To Ultlinha
For j = 1 To UltColuna
If j = UltColuna Then
DadoCell = DadoCell & Cells(i, j).Value
Else
DadoCell = DadoCell & Cells(i, j).Value & ", " 'Necessário ", "
End If
Next j
Print #NumArquivo, DadoCell
DadoCell = ""
Next i
Close #NumArquivo 'Salva e fecha o arquivo de texto com os dados
End Sub
Caso a pasta que você esteja salvando o arquivo ainda não exista, irá ocorrer um erro.
SuperExcelVBA.com é um site voltado ao aprendizado de VBA. Exemplos e explicações podem ter sido simplificados para maior e mais veloz compreensão. Estamos constantemente nos atualizando e corrigindo erros, porém não existe garantia sobre o conteúdo disponível no site. Todos os direitos reservados.
Excel ® é uma marca registrada da Microsoft Corporation.
© 2024 SuperExcelVBA | SOBRE