Blog

Postado em em 24 de março de 2023

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

Você sabe como ler vários PDFs pelo VBA? Nesta aula vamos explicar de forma detalhada como conseguir extrair os textos sem tabela!

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!

Como Ler Vários PDFs pelo VBA

Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:

Fala Impressionadores! Na aula de hoje eu quero te mostrar como ler PDF com VBA!

Isso quer dizer que vamos poder pegar qualquer informação, esteja ela em uma tabela ou não, e vamos conseguir ler!

Um dos passos que vamos fazer é colocar o PDF dentro do Word com VBA, assim vamos conseguir utilizar os métodos e propriedades do Word com VBA e trazer nossas informações.

E aí, quer aprender como usar o VBA para ler informações de PDF e automatizar o seu trabalho e ganhar muito mais tempo? Então bora para a aula!

O primeiro passo é baixar a planilha que disponibilizei no material didático! Feito isso clique em alt+f11 para acessar o ambiente VBA da planilha:

Como Ler Vários PDFs pelo VBA
VBA – Código

Você vai precisar Habilitar a referência Microsoft Word 16.0 Object Library, para isso clique em Ferramentas -> Referencias -> procure por Microsoft Word 16.0 Object Library, esta lista está em ordem alfabética.

No início e no final do código eu coloquei algumas Aplicações, elas agilizam a execução do código, neste link explicamos no detalhe como fazer.

Aplicações

-Início do código

Application.ScreenUpdating = False

Application.Calculation = xlCalculationManual

-Final do código

Application.ScreenUpdating = True

Application.Calculation = xlCalculationAutomatic

Essas aplicações estão dizendo para o nosso código que, embora seja o padrão do Excel recalcular o código a cada mudança, neste caso só será recalculado após sair da última aplicação.

A construção deste código mais detalhado está na aula -> como você pode pegar informações de tabelas em PDF, caso não tenha visto clique no link!

Nesta aula vamos nos concentrar mais em explicar cada parte do código que já está pronto no material e vamos aprender como ler as informações do PDF pelo VBA mesmo sem tabelas.

Dito isso, vamos começar declarando as nossas variáveis, são 6 variáveis no total:

  • 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.

A próxima linha de código é o caminho da nossa pasta de arquivos (o mesmo usado na aula anterior, nele vamos encontrar várias tabelas em PDF):

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\"

Na próxima linha estamos utilizando o Dir para indicar que queremos utilizar todos os arquivos de uma pasta, o Dir pega esses arquivos e coloca em uma variável, neste caso a variável -> arqPasta.

arqPasta = Dir(caminhoPasta)

App.Word.Visible = True

Nesta linha estamos determinando se o arquivo Word fica ou não visível para nós, isso é importante para a economia de processamento, vamos deixar visível somente quando for para testar o código ou quando precisarmos ver essa informação.

While

Agora precisamos percorrer os 9 arquivos que temos dentro da variável, para percorrer os arquivos vamos usar a estrutura de repetição While:

A estrutura While faz com que o código se repita enquanto uma condição for verdadeira.

While arqPasta <> ""

    nomeCompletoArq = caminhoPasta & arqPasta

Na primeira linha estamos juntando o nome do arquivo que está na pasta com o caminho do arquivo.

     Set do Word = appWord.Documents.Open(nomeCompletoArq, False, True)

 

Nesta linha estamos definindo que a variável vai receber a aplicação do Word, ou seja, abrir um documento dentro do Word, este documento é o que estiver dentro da variável nomeCompletoArq.

Além disso, colocamos mais dois argumentos, o primeiro argumento False está impedindo que a mensagem padrão de converter o documento PDF em Word seja mostrado, novamente para poupar processamento, o segundo argumento define que queremos apenar ler o arquivo, não vamos fazer edições.

Se pararmos o código por aqui e rodar, já teremos o documento em Word, você vai notar que ele vai estar um pouco menos organizado do que quando estava em PDF, mas, mesmo assim, todas as informações de texto e imagem estão lá e podem ser trabalhadas neste formato.

Podemos ver essas informações de várias formas diferentes:

Como Ler Vários PDFs pelo VBA
docWord

Vamos colocar o docWord. Fazendo isso podemos verificar as bibliotecas do VBA, os métodos e as propriedades, você pode distinguir pelo ícone o que é método e o que é propriedade, o ícone dos métodos é verde e o das propriedades preto e branco.

Vamos descer a barra lateral até encontrar Tables (tabelas), e em seguida temos acesso a todas as opções de ações para trabalhar com as tabelas:

ações
ações

Dessa forma podemos trabalhar com sentenças, parágrafos e todas as opções presentes na lista.

Como Ler Vários PDFs pelo VBA
sentences

Vamos agora contar as sentenças do nosso arquivo -> docWord.Sentences.Count

E somar a este código o Debug.Print, assim podemos ir verificando o código enquanto fazemos:

Debug.Print docWord.Sentences.Count

Para executar, selecione a linha de código e aperte F8, na janela vai aparecer o total de sentenças que temos no texto, que são 60 sentenças…

Podemos também fazer a pesquisa direto dentro da janela do Debug colocando o sinal de interrogação seguido de docWord + a ação que precisamos executar.

Como Ler Vários PDFs pelo VBA
Debug.Print

Vamos usar o número da sentença que queremos entre parênteses, observe que o resultado vem sem muita formatação, mas podemos melhorar isso usando funções de limpeza nativas do Excel -> ?worksheetfunction.Clean

Como Ler Vários PDFs pelo VBA
clean

Exemplo:

'    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))

    For Each frasePDF In docWord.Sentences

A frase “R$ milhões” é a primeira frase dentro do texto, se quisermos pegar esta frase dentro de cada um dos documentos, como o código está, já temos isso pronto e podemos passar para a nossa tabela em Excel.

Na coluna A do nosso arquivo vamos colocar o nome do documento. Para isso vamos precisar identificar qual é a primeira célula vazia da coluna A.

Temos algumas formas de fazer isso, podemos usar o (control + seta para baixo) a coluna vazia é a próxima linha ou podemos ir para a última linha do Excel (linha 1048576), clicar em (control + seta para cima, que é igual a -> End(xlUp) no VBA ) a linha vazia é a próxima linha abaixo (Offset(1, 0) significa -> deslocar uma linha para baixo e 0 colunas – VBA).

Para fazer o preenchimento vamos usar esta mesma lógica, porém, vamos construí-la dentro do VBA.

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

 Feito isso, selecione a linha de código e clique em F8, vai notar que a primeira linha com o nome do arquivo será preenchida!

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

 Vamos fazer o mesmo com a coluna B, dessa vez queremos a primeira frase do texto.

Agora só precisamos repetir o código até o preenchimento total da tabela, vamos colocar que o arquivo é igual a Dir e com o Wend retornar ao começo do While.

arqPasta = Dir

Wend

 Quando sairmos do loop de repetição podemos finalizar o código fechando o documento de Word:

docWord.Close False

Limpar a variável (boa prática)

Set docWord = Nothing

Podemos também fechar e limpar a aplicação do Word:   

appWord.Quit

Set appWord = Nothing

Agora, vamos rodar o código clicando no botão F5 do nosso teclado:

Resultado
Resultado

Quando o código terminar podemos colocar uma mensagem avisando que chegou ao fim:

MsgBox ("Terminou de executar!")

Outra forma de fazer esse preenchimento é utilizando o For Each, caso você não conheça essa estrutura clique no link!

Exemplo de como usar o For Each:

 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

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

Nesta aula trouxe um passo a passo de Como Ler Vários PDFs pelo VBA.

Para isso usamos e mesma tabela de uma das aulas anteriores, cujo link se encontra no início do texto, cada ação feita no código foi explicada a cada linha.

Agora você já pode usar sua criatividade para treinar não só o que vimos nesta aula, mas também as várias possibilidades de funções que temos para trabalhar com texto no VBA!

Espero que tenham gostado! Um abraço,

Hashtag Treinamentos

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


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

Quer sair do zero no Python e virar uma referência na sua empresa? Inscreva-se agora mesmo no Python Impressionador