Como Ler Vários PDFs pelo VBA com ou sem Tabelas

Você sabe como ler vários PDFs pelo VBA? Nesta aula vamos explicar passo a passo como extrair textos de PDFs usando o VBA, mesmo que os arquivos não tenham tabelas!

Automatize a Leitura de PDFs pelo VBA

Na aula de hoje você vai aprender como ler PDF com VBA! Isso significa que você será capaz de capturar qualquer informação de arquivos PDF, seja em formato de texto simples ou em tabelas, de forma rápida e automatizada.

Uma das etapas essenciais do nosso processo será importar o conteúdo do PDF para o Word utilizando o VBA. Assim, vamos conseguir explorar as funcionalidades do Word dentro do Excel e coletar as informações desejadas.

Quer aprender como ler arquivos PDF com VBA e automatizar suas tarefas para ganhar tempo no trabalho? Então faça download do material abaixo e continue com a leitura!

Para fazer o download do(s) arquivo(s) utilizados na aula, preencha com o seu e-mail:

Baixando a Planilha para o VBA

O primeiro passo é fazer o download da planilha disponível no material didático. Com a planilha aberta, pressione Alt + F11 para acessar o Editor do VBA.

Como Ler Vários PDFs pelo VBA

Como Ler Vários PDFs Usando o VBA

Antes de começarmos o código, é importante configurar a biblioteca correta no VBA.

Habilitando a Biblioteca do Word no VBA

Você precisará habilitar a referência Microsoft Word 16.0 Object Library. Para isso:

  • Clique em Ferramentas > Referências
  • Procure por Microsoft Word 16.0 Object Library (a lista está em ordem alfabética)
  • Marque a caixa e clique em OK

Aplicações para Otimizar o Código VBA

No início e no final do código, vamos utilizar algumas Applications que tornam a execução mais rápida.

No início do código:

VBA
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

No final do código:

VBA
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

Essas configurações garantem que o Excel não fique recalculando durante a execução, o que deixa o processamento mais eficiente. O cálculo só será atualizado ao final do código.

Dica Extra: Se quiser entender melhor essas aplicações, temos um conteúdo exclusivo explicando todos os detalhes: como você pode pegar informações de tabelas em PDF.

Declaração de Variáveis no VBA

O próximo passo é declarar as variáveis que usaremos para ler múltiplos PDFs. Serão seis variáveis principais:

  • Dim appWord As New Word.Application -> Aplicação do Word dentro do VBA
  • Dim docWord As Word.Document -> Documento do Word
  • Dim nomeCompletoArq As String -> Nome completo do arquivo, pasta + nome
  • Dim frasePDF As Variant -> Textos em geral
  • Dim arqPasta As Variant -> Pasta de arquivos
  • Dim caminhoPasta As String -> Endereço ou caminho das pastas de arquivo.

Definindo o Caminho da Pasta

Aqui você define o caminho onde estão seus arquivos PDF:

VBA
caminhoPasta = "C:\Users\Diego\OneDrive - hashtagtreinamentos.com\Hashtag\Online\Arquivos das Aulas\2023\VBA\03-17 - Como ler informações de vários PDFs pelo VBA (com ou sem tabelas)\Arquivos\"

Importante: Esse é o mesmo caminho utilizado na aula sobre leitura de tabelas em PDFs.

Listando os Arquivos da Pasta

O comando abaixo utiliza Dir para buscar todos os arquivos da pasta e armazenar na variável arqPasta:

VBA
arqPasta = Dir(caminhoPasta)

Tornando o Word Visível (ou Não)

Com o comando abaixo, você controla se o Word ficará visível ou não durante o processo:

VBA
App.Word.Visible = True

Isso ajuda a economizar processamento. Deixe o Word invisível na automação e visível apenas quando quiser testar ou acompanhar o que está acontecendo.

Ícone VBAVBA Impressionador

Como automatizar praticamente qualquer tarefa repetitiva que você faça dentro do Excel. Aprenda a criar integrações do Excel com o PowerPoint, Word, Outlook e muito mais. Aprenda a criar automações para resolver tudo com apenas um clique em um botão. Tudo isso com uma única linguagem que junta todos esses programas.

Começar agoraSeta para a direita
Fundo VBATelas VBA

Como Ler Vários PDFs pelo VBA: Loop While para Percorrer os Arquivos

Agora vamos percorrer todos os arquivos PDF que estão dentro da variável arqPasta. Para isso, utilizaremos a estrutura de repetição While no VBA.

A estrutura While faz com que o código continue rodando enquanto uma determinada condição for verdadeira.

VBA
While arqPasta <> ""

Ou seja, enquanto existirem arquivos na pasta, o código seguirá rodando.

Concatenando o Caminho Completo do Arquivo PDF

Em seguida, unimos o nome do arquivo (armazenado em arqPasta) com o caminho da pasta (caminhoPasta), criando o caminho completo do arquivo PDF.

VBA
While arqPasta <> ""
    nomeCompletoArq = caminhoPasta & arqPasta

Abrindo o PDF no Word pelo VBA

VBA
Set docWord = appWord.Documents.Open(nomeCompletoArq, False, True)

Nesta linha estamos dizendo que a variável docWord vai receber o documento do Word, que é aberto a partir do arquivo PDF.

  • O primeiro argumento False impede que apareça a mensagem de conversão do PDF em Word, ajudando a economizar processamento.
  • O segundo argumento True indica que o arquivo será apenas lido, sem edições.

Observação: Apenas rodando o código até aqui já conseguimos abrir o PDF no Word. Apesar de o layout mudar um pouco, o conteúdo de texto e imagens permanece acessível.

Como Ler Vários PDFs pelo VBA

Explorando Sentenças, Parágrafos e Tabelas no VBA

Após abrir o PDF, podemos explorar diferentes elementos do documento utilizando a variável docWord:

  • Usar .Sentences para trabalhar com sentenças
  • Acessar .Paragraphs para manipular parágrafos
  • Usar .Tables para acessar as tabelas
ações

Usando Debug.Print, conseguimos verificar na janela Immediate o número total de sentenças do documento. Para visualizar, selecione a linha e pressione F8:

VBA
Debug.Print docWord.Sentences.Count
Como Ler Vários PDFs pelo VBA

Dica: Testando Comandos no Debug

Você também pode testar comandos diretamente na janela Immediate usando o sinal de interrogação(?):

VBA
?docWord.Sentences(1).Text

O texto aparecerá sem formatação, mas podemos melhorar usando as funções nativas do Excel, como:

VBA
WorksheetFunction.Clean(WorksheetFunction.Trim(docWord.Sentences(1).Text))
Como Ler Vários PDFs pelo VBA

Preenchendo Dados na Planilha com VBA

A primeira frase dentro do texto é “R$ milhões”. Se quisermos extrair essa frase de cada um dos documentos PDF, com o código atual já conseguimos fazer isso e jogar diretamente na tabela do Excel.

Na coluna A vamos inserir o nome do documento. Para isso, precisamos identificar qual é a primeira célula vazia da coluna A.

Existem duas formas de fazer isso manualmente:

  • Pressionar Ctrl + seta para baixo para ir até a última linha preenchida e depois descer uma linha.
  • Ou ir direto para a última linha do Excel (linha 1048576) e usar Ctrl + seta para cima para chegar na última célula preenchida. A primeira linha vazia será logo abaixo.

No VBA usamos exatamente essa lógica de maneira automatizada:

VBA
Range("A1048576").End(xlUp).Offset(1, 0).Value = arqPasta

Ao rodar essa linha (F8), você verá que o nome do arquivo será preenchido corretamente na próxima linha vazia da coluna A.

Em seguida, para capturar a primeira frase do PDF já limpa e organizada:

VBA
Range("B1048576").End(xlUp).Offset(1, 0).Value = WorksheetFunction.Clean(frasePDF.Text)

Dessa forma, na coluna B será preenchida a frase extraída do PDF, com limpeza de espaços e caracteres especiais.

Entenda a lógica do preenchimento:

  • End(xlUp) localiza a última linha preenchida
  • Offset(1, 0) move para a próxima linha

Assim, novos dados não sobrescrevem informações já existentes

Opções de Preenchimento: Primeira Frase ou Todas as Sentenças

Agora que você já entendeu a lógica de preenchimento no Excel, temos dois cenários práticos que podem ser úteis dependendo da sua necessidade:

Opção 1: Capturar Apenas a Primeira Frase do PDF

Se o objetivo é pegar apenas uma informação rápida, por exemplo, a primeira frase do documento, você pode fazer isso diretamente, sem precisar percorrer todas as sentenças.

Exemplo:

VBA
Range("A1048576").End(xlUp).Offset(1, 0).Value = arqPasta
Range("B1048576").End(xlUp).Offset(1, 0).Value = WorksheetFunction.Clean(WorksheetFunction.Trim(docWord.Sentences(1).Text))

Opção 2: Capturar Todas as Sentenças do PDF com Loop For Each

Caso você queira extrair todas as sentenças do PDF e registrar cada uma em uma nova linha da planilha, o ideal é utilizar o loop For Each.

Exemplo:

VBA
For Each frasePDF In docWord.Sentences
    Range("A1048576").End(xlUp).Offset(1, 0).Value = arqPasta
    Range("B1048576").End(xlUp).Offset(1, 0).Value = WorksheetFunction.Clean(frasePDF.Text)
Next frasePDF

Dessa forma, o VBA preenche uma linha para cada sentença do PDF, mantendo na coluna A o nome do arquivo e na coluna B o texto extraído, já limpo com as funções do Excel.

Quando Usar Cada Opção

  • Use somente a primeira frase quando quiser um resumo rápido do documento, como um título ou uma informação principal.
  • Use o For Each quando o objetivo for extrair o conteúdo completo do PDF e registrar cada frase em uma nova linha.

Ambos os métodos seguem a mesma lógica de preenchimento sem sobrescrever dados já existentes.

Conclusão - Como Ler Vários PDFs pelo VBA

Nesta aula, você aprendeu um passo a passo detalhado sobre como ler vários PDFs utilizando VBA, mesmo quando os arquivos contêm ou não tabelas.

Trabalhamos com a mesma base de arquivos da aula anterior e explicamos cada trecho do código para garantir que você compreenda o funcionamento de cada etapa.

Agora, com essa base, você está preparado para explorar e aplicar diversas funções do VBA para manipular textos, automatizar processos e expandir ainda mais suas soluções.

Use sua criatividade para ir além e criar projetos cada vez mais eficientes!

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo ou acesse nosso Canal do YouTube para mais vídeos!

Hashtag Treinamentos

Para acessar outras publicações de VBA, clique aqui!


Quer aprender mais sobre VBA com um minicurso básico gratuito?

Posts mais recentes de VBA

Posts mais recentes da Hashtag Treinamentos