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.
© 2025 SuperExcelVBA | SOBRE