Como Ler Arquivos Externos Usando VBA no Word
🔍 WiseChecker

Como Ler Arquivos Externos Usando VBA no Word

Você pode automatizar o Word para ler dados de arquivos externos como arquivos de texto, CSV ou outros documentos do Word sem abrir cada um manualmente. Isso é útil quando você precisa importar grandes quantidades de dados, gerar relatórios ou processar informações em lote. A instrução VBA Open e o FileSystemObject fornecem dois métodos confiáveis para ler conteúdo externo. Este artigo explica ambas as abordagens e mostra como escrever o código VBA passo a passo.

Principais Conclusões: Leitura de Arquivos Externos com VBA no Word

  • Instrução Open com modo Input: Leia arquivos de texto ou CSV linha por linha usando o comando Line Input # dentro de um loop Do While.
  • FileSystemObject (FSO): Use CreateObject("Scripting.FileSystemObject") para abrir, ler e fechar arquivos com mais controle orientado a objetos.
  • Caminho do arquivo e tratamento de erros: Sempre forneça o caminho completo do arquivo e use On Error GoTo para capturar arquivos ausentes ou problemas de permissão.

ADVERTISEMENT

Visão Geral da Leitura de Arquivos Externos com VBA

O VBA no Word pode ler arquivos externos usando dois métodos principais: a instrução Open nativa e o FileSystemObject (FSO) da biblioteca Scripting Runtime. A instrução Open é nativa do VBA e não requer referências adicionais. Ela funciona bem para arquivos de texto, CSV e de log. O FileSystemObject oferece mais flexibilidade, como verificar se um arquivo existe antes de ler, e suporta a leitura de arquivos inteiros de uma vez ou linha por linha.

Antes de escrever o código, você precisa saber o caminho completo do arquivo externo. Por exemplo, C:\Dados\Relatorio.txt ou \\Servidor\Compartilhamento\Dados.csv. Você também precisa decidir se vai ler o arquivo linha por linha ou como uma única string. A leitura linha por linha é útil para dados estruturados como arquivos CSV, onde cada linha representa um registro. Ler o arquivo inteiro de uma vez é mais rápido para arquivos menores que você deseja inserir diretamente em um documento do Word.

Ambos os métodos exigem que você feche o arquivo após a leitura para liberar recursos do sistema. Não fechar um arquivo pode causar vazamentos de memória ou problemas de bloqueio de arquivo. Os exemplos neste artigo incluem o fechamento adequado do arquivo e tratamento básico de erros.

Passos para Ler um Arquivo de Texto Usando a Instrução Open

A instrução Open é a maneira mais simples de ler um arquivo de texto em VBA. Você especifica o caminho do arquivo, o modo (Input, Output, Append ou Binary) e um número de arquivo. Use a função FreeFile para obter automaticamente o próximo número de arquivo disponível.

  1. Declare variáveis e obtenha um número de arquivo livre
    Abra o editor VBA no Word pressionando Alt+F11. Insira um novo módulo em Insert > Module. Escreva Dim fileNum As Integer: fileNum = FreeFile para reservar um número de arquivo.
  2. Abra o arquivo no modo Input
    Use Open "C:\Dados\Relatorio.txt" For Input As #fileNum. Isso abre o arquivo apenas para leitura. Se o arquivo não existir, o VBA gera um erro de tempo de execução.
  3. Leia o arquivo linha por linha
    Use um loop Do While Not EOF(fileNum). Dentro do loop, use Line Input #fileNum, lineText para ler uma linha em uma variável string. Processe cada linha conforme necessário.
  4. Feche o arquivo
    Após o loop terminar, use Close #fileNum para liberar o arquivo. Sempre feche o arquivo mesmo se ocorrer um erro, colocando a instrução de fechamento no manipulador de erros.
  5. Adicione tratamento de erros
    Envolva o código com On Error GoTo ErrHandler. No rótulo ErrHandler, feche o arquivo se estiver aberto e exiba uma mensagem.

Exemplo de código para o procedimento completo:

Sub LerArquivoTexto()
    Dim fileNum As Integer
    Dim lineText As String
    Dim filePath As String
    filePath = "C:\Dados\Relatorio.txt"
    On Error GoTo ErrHandler
    fileNum = FreeFile
    Open filePath For Input As #fileNum
    Do While Not EOF(fileNum)
        Line Input #fileNum, lineText
        ' Processe lineText aqui
        Debug.Print lineText
    Loop
    Close #fileNum
    Exit Sub
ErrHandler:
    If fileNum > 0 Then Close #fileNum
    MsgBox "Erro ao ler arquivo: " & Err.Description
End Sub

ADVERTISEMENT

Passos para Ler um Arquivo Usando FileSystemObject

O FileSystemObject fornece uma abordagem orientada a objetos. Você cria uma instância do objeto, abre um fluxo de texto e lê o conteúdo. Este método permite verificar se o arquivo existe antes de tentar lê-lo.

  1. Crie o FileSystemObject
    Use Dim fso As Object: Set fso = CreateObject("Scripting.FileSystemObject"). Não adicione uma referência à biblioteca Scripting Runtime, a menos que prefira ligação antecipada.
  2. Verifique se o arquivo existe
    Use If fso.FileExists(filePath) Then para evitar erros de tempo de execução. Se o arquivo não existir, saia da sub-rotina ou exiba uma mensagem.
  3. Abra o arquivo como um fluxo de texto
    Use Set ts = fso.OpenTextFile(filePath, ForReading). A constante ForReading tem valor 1. Você também pode especificar o formato: ForReading, False, TristateTrue para Unicode.
  4. Leia o conteúdo
    Use ts.ReadAll para ler o arquivo inteiro em uma string, ou use ts.ReadLine dentro de um loop com Do While Not ts.AtEndOfStream para leitura linha por linha.
  5. Feche o fluxo de texto e libere o objeto
    Use ts.Close e depois Set ts = Nothing: Set fso = Nothing para liberar memória.

Exemplo de código para ler um arquivo inteiro em um documento do Word:

Sub LerArquivoComFSO()
    Dim fso As Object
    Dim ts As Object
    Dim filePath As String
    Dim fileContent As String
    filePath = "C:\Dados\Relatorio.txt"
    Set fso = CreateObject("Scripting.FileSystemObject")
    If Not fso.FileExists(filePath) Then
        MsgBox "Arquivo não encontrado: " & filePath
        Exit Sub
    End If
    Set ts = fso.OpenTextFile(filePath, 1, False, 0) ' 1 = ForReading, 0 = ASCII
    fileContent = ts.ReadAll
    ts.Close
    ' Insere o conteúdo no documento ativo
    ActiveDocument.Content.InsertAfter fileContent
    Set ts = Nothing
    Set fso = Nothing
End Sub

Erros Comuns ao Ler Arquivos Externos

Arquivo não encontrado ou caminho incorreto

O erro mais frequente é um caminho de arquivo errado. Sempre use o caminho absoluto completo. Se o caminho contiver espaços, coloque-o entre aspas dentro da string VBA. Use Dir(filePath) para verificar se o arquivo existe antes de abri-lo.

Esquecer de fechar o arquivo

Se você não fechar um arquivo aberto com a instrução Open, o arquivo permanece bloqueado até que você feche o Word. Isso pode impedir que outros programas acessem o arquivo. Sempre feche o arquivo no manipulador de erros, conforme mostrado nos exemplos.

Ler um arquivo binário como texto

Os métodos descritos acima funcionam apenas para arquivos de texto simples. Se você tentar ler um arquivo binário como .docx ou .xlsx, o resultado será ilegível. Para arquivos binários, use o modo Binary com a instrução Open e leia arrays de bytes.

Erros de permissão negada

Se o arquivo externo estiver aberto em outro programa ou estiver marcado como somente leitura em um compartilhamento de rede, o VBA pode retornar um erro de permissão. Verifique as permissões do arquivo e certifique-se de que nenhum outro processo tenha o arquivo bloqueado.

Instrução Open vs FileSystemObject: Principais Diferenças

Item Instrução Open FileSystemObject
Requer referência Não Não (ligação tardia) ou Scripting Runtime (ligação antecipada)
Verificação de existência do arquivo Não embutida; use a função Dir Método FileExists embutido
Ler arquivo inteiro de uma vez Possível com a função Input, mas limitado a 65535 caracteres Sim, com ReadAll
Leitura linha por linha Sim, com Line Input Sim, com ReadLine
Suporte a arquivos binários Sim, usando modo Binary Não diretamente; requer métodos adicionais
Desempenho em arquivos grandes Mais lento para leitura linha por linha Mais rápido com ReadAll para arquivos abaixo de 100 MB

Agora você pode ler arquivos de texto externos do Word usando VBA com a instrução Open ou o FileSystemObject. Escolha o FileSystemObject quando precisar verificar a existência do arquivo ou ler o conteúdo inteiro rapidamente. Use a instrução Open para scripts mais simples ou ao trabalhar com arquivos binários. Como próximo passo, tente processar dados CSV dividindo cada linha com a função Split e inserindo valores em uma tabela do Word. Uma dica avançada: use GetOpenFilename para permitir que o usuário selecione o arquivo em tempo de execução, em vez de codificar o caminho.

ADVERTISEMENT