Hoje vamos dar início a Série Automação Web Aula1, que é uma série de Web Scraping no VBA (buscar dados da web com o VBA).
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Fala, pessoal! Prontos para mais uma série da Hashtag?
Teremos uma nova série, vamos te ensinar como fazer uma automação web no VBA (web scraping no VBA) para fazer uma comparação de preços.
Mas o que é Web Scraping?
O Web Scraping VBA é uma forma de obter dados da internet, utilizando o VBA, que é a linguagem de programação do Excel.
E qual será o nosso projeto?
Além de mostrar como obter dados da web com VBA eu vou te mostrar como criar um comparador de preços com VBA.
Na série proposta iremos criar códigos (macros VBA) para acessar 3 sites diferentes, com objetivo de fazer uma busca de preço de um determinado produto. Feito isso vamos registrar na planilha o menor preço e a loja referente a esse preço.
Vamos poder determinar um preço alvo (desejado) para um produto específico, para saber se o preço está conforme o que você pretende pagar por ele. Isso quer dizer que não vamos apenas comparar preços na web com VBA.
Vamos verificar o menor preço de cada produto, comparar com o desejado, e ainda informar uma mensagem de alerta se esse valor estiver mais baixo do que o preço alvo.
Assim vamos saber se o item está com o preço desejado!
Claro que não vamos só te mostrar o comparador de preços Excel, vamos te mostrar como fazer automação web com VBA em diversas aulas, com os passos e explicações específicas, utilizando as macros no VBA.
Fique ligado com a gente nessa série, que você vai ter todo o passo a passo para fazer VBA web scraping e aplicar nos seus projetos pessoais ou profissionais!
Essa é a Série Automação Web Aula 2 onde vamos criar a nossa planilha e vamos te mostrar a lógica de programação para o nosso código!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Nessa aula nós já vamos dar início a nossa Série Automação WEB em VBA, onde vamos fazer o famoso web scraping no VBA (busca de informações na web).
Eu vou iniciar te mostrando como fazer formatação no Excel, ou seja, vou te mostrar como fazer a formatação básica que vamos utilizar para inserir nossas informações.
Vou te mostrar como formatar um botão no Excel (para poder criar um botão no Excel que vai rodar as macros VBA).
Outro ponto muito importante que vou te ensinar é como salvar arquivo com macro no Excel, pois se salvar normalmente o Excel não vai reconhecer os códigos que criou, então temos que alterar o tipo do arquivo na hora de salvar.
Montagem da tabela
Vamos dar início à nossa planilha montando a estrutura de tabela apresentada abaixo, onde vamos informar, nas colunas, a Data de Verificação, Produto, Menor Preço, Loja, Preço Alvo, Amazon, Lojas Americanas e Magazine Luiza (lojas escolhidas para pesquisar os produtos e seus respectivos preços). Observe:
Lembrando que vamos:
Inserindo Botão para rodar o código
Precisamos de um botão que será nosso ativador ou abridor do nosso código quando pronto (representado na imagem acima por “Rodar Verificação”).
Salvar arquivo habilitado para macro
Para salvar a planilha com o formato .xlsm, você deve:
A outra forma é mostrada no vídeo, equivalente a essa apresentada aqui.
Essa é a Série Automação Web Aula3 onde vamos buscar preço de um produto na web e vamos trazer esse valor para dentro do VBA!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Nessa aula vamos te ensinar como acessar internet com VBA para que possamos dar continuidade a nossa Série Automação Web em VBA.
Quero te ensinar como acessar site com VBA e como você pode buscar informações dentro dele para construir seu código de acordo com a informação que deseja extrair.
Então para isso vamos buscar o preço de um produto na web com VBA, e teremos que:
Observe a seguir o código necessário para fazer os passos descritos anteriormente, e posteriormente sua explicação/detalhamento.
Sub ComparadorDePreco()
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
objIE.Navigate "https://www.amazon.com.br/Fritadeira-sem-%C3%93leo-Mondial-AF-30I/dp/B07WFHZQ2T/ref=sr_1_1"
precoProduto = objIE.document.getElementById("priceblock_ourprice").innerText
objIE.Quit
Set objIE = Nothing
End Sub
Explicação do código acima (ComparadorDePreco):
Essa é a Série Automação Web Aula 4 onde vamos incluir mais lojas na nossa busca de preços para podermos fazer a comparação deles!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a quarta aula da Série Automação Web em VBA e nessa aula nós vamos pegar os preços das outras lojas e vamos tratar essas informações para obter o menor valor entre eles.
No web scraping VBA da aula de hoje nós vamos:
Essa é uma aula bem importante para que você aprenda a resolver alguns tipos de problemas, pois nem sempre o código vai rodar de primeira ou você vai saber logo de cara o que houve de errado, às vezes um problema simples pode demorar muito para ser resolvido.
Sub ComparadorDePreco()
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
'Buscando o preço na Amazon
objIE.Navigate "https://www.amazon.com.br/Fritadeira-sem-%C3%93leo-Mondial-AF-30I/dp/B07WFHZQ2T/ref=sr_1_1"
precoProdutoAm = CDbl(Replace(objIE.document.getElementById("priceblock_ourprice").innerText, "R$ ", ""))
'Buscando o preço nas Lojas Americanas
objIE.Navigate "https://www.americanas.com.br/produto/204662938"
precoProdutoLA = CDbl(Replace(objIE.document.getElementsByClassName("src__BestPrice-sc-1jvw02c-5 cBWOIB priceSales")(0).innerText, "R$ ", ""))
'Buscando o preço na Magazine Luiza
objIE.Navigate "https://www.magazineluiza.com.br/fritadeira-eletrica-sem-oleo-air-fryer-mondial-family-iv-af-30i-preta-35l-com-timer/p/023386000/ep/frel/"
precoProdutoML = CDbl(objIE.document.getElementsByClassName("price-template__text")(0).innerText)
menorPreco = WorksheetFunction.Min(precoProdutoAm, precoProdutoLA, precoProdutoML)
objIE.Quit
Set objIE = Nothing
End Sub
Explicação do código acima (ComparadorDePreco):
Essa é a Série Automação Web Aula5 e nessa aula eu vou te ensinar algo muito importante que é o tratamento de erros no VBA.
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a quinta aula da Série Automação Web, e nessa aula nós vamos continuar com o web scraping no VBA, só que vamos abordar como tratar erros no VBA.
Como você deve saber nem todo código vai rodar 100%, em alguns casos vamos ter alguns erros e nós vamos conseguir fazer o tratamento de erros no VBA.
Esse tratamento vai ser feito com o On Error GoTo no VBA para que sempre que um erro ocorra no seu código, nós possamos escrever um código para ser executado ao invés do código parar de rodar.
Então vamos poder criar um código para esperar um determinado tempo, pois como você deve saber algumas páginas na internet não atualizam ou não abrem de forma instantânea. Com isso, erros poderiam ser gerados, e devemos tratá-los para que o código flua normalmente.
Temos, portanto, que esperar um tempo até que tudo da página fique visível/carregado para dar continuidade ao código.
Sub ComparadorDePreco()
Set objIE = CreateObject("InternetExplorer.Application")
objIE.Visible = True
'Buscando o preço na Amazon
objIE.Navigate "https://www.amazon.com.br/Fritadeira-sem-%C3%93leo-Mondial-AF-30I/dp/B07WFHZQ2T/ref=sr_1_1"
PassarErroEsperar:
On Error GoTo Esperar
precoProdutoAm = CDbl(Replace(objIE.document.getElementById("priceblock_ourprice").innerText, "R$ ", ""))
On Error GoTo 0
'Buscando o preço nas Lojas Americanas
objIE.Navigate "https://www.americanas.com.br/produto/204662938"
PassarErroEsperar1:
On Error GoTo Esperar1
precoProdutoLA = CDbl(Replace(objIE.document.getElementsByClassName("src__BestPrice-sc-1jvw02c-5 cBWOIB priceSales")(0).innerText, "R$ ", ""))
On Error GoTo 0
'Buscando o preço na Magazine Luiza
objIE.Navigate "https://www.magazineluiza.com.br/fritadeira-eletrica-sem-oleo-air-fryer-mondial-family-iv-af-30i-preta-35l-com-timer/p/023386000/ep/frel/"
PassarErroEsperar2:
On Error GoTo Esperar2
precoProdutoML = CDbl(objIE.document.getElementsByClassName("price-template__text")(0).innerText)
On Error GoTo 0
menorPreco = WorksheetFunction.Min(precoProdutoAm, precoProdutoLA, precoProdutoML)
objIE.Quit
Set objIE = Nothing
Exit Sub
Esperar:
Application.Wait (Now + TimeValue("00:00:01"))
Resume PassarErroEsperar
Esperar1:
Application.Wait (Now + TimeValue("00:00:01"))
Resume PassarErroEsperar1
Esperar2:
Application.Wait (Now + TimeValue("00:00:01"))
Resume PassarErroEsperar2
End Sub
Explicação do código acima (ComparadorDePreco):
Essa é a Série Automação Web Aula6 onde vamos abortar a famosa estrutura de repetição For para facilitar o nosso trabalho na busca de preços!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a Série Automação Web Aula 6 e nessa aula nós vamos utilizar a famosa estrutura de repetição For no VBA.
Essa estrutura de repetição For Next vai permitir com que você consiga fazer a repetição do código no VBA quantas vezes precisar sem ter que escrever esse código repetido.
Imagine que tivéssemos 100 preços para buscar, você já pensou se fosse copiar e colar manualmente seu código 100 vezes? Nem faria sentido não é mesmo?
Por esse motivo é que temos a estrutura For no VBA (loop no VBA como também é conhecido).
Então poderemos interpretar quantas lojas tiverem (escolhemos apenas 3), e quantos produtos tiverem listados na nossa tabela, e nossa estrutura de repetição vai fazer as ações para vários produtos de forma igual, com objetivo igual.
Acompanhe com a gente o código responsável por fazer isso:
Sub ComparadorDePreco()
Set objIE = CreateObject("InternetExplorer.Application")
'objIE.Visible = True
ultLin = Range("B1000000").End(xlUp).Row
For lin = 2 To ultLin
menorPreco = ""
For col = 6 To 8
objIE.Navigate Cells(lin, col).Value
PassarErroEsperar:
On Error GoTo Esperar
If col = 6 Then 'Buscando o preço na Amazon
precoProduto = CDbl(Replace(objIE.document.getElementById("price_inside_buybox").innerText, "R$ ", ""))
ElseIf col = 7 Then 'Buscando o preço nas Lojas Americanas
precoProduto = CDbl(Replace(objIE.document.getElementsByClassName("src__BestPrice-sc-1jvw02c-5 cBWOIB priceSales")(0).innerText, "R$ ", ""))
Else 'Buscando o preço na Magazine Luiza
precoProduto = CDbl(objIE.document.getElementsByClassName("price-template__text")(0).innerText)
End If
On Error GoTo 0
If menorPreco = "" Then
menorPreco = precoProduto
lojaMenorPreco = Cells(1, col).Value
ElseIf precoProduto < menorPreco Then
menorPreco = precoProduto
lojaMenorPreco = Cells(1, col).Value
End If
Next col
Cells(lin, 3).Value = menorPreco 'Definindo o menor preço encontrado para o produto
Cells(lin, 4).Value = lojaMenorPreco 'Definindo a loja que possui o menor preço
Next lin
objIE.Quit
Set objIE = Nothing
Exit Sub
Esperar:
Application.Wait (Now + TimeValue("00:00:01"))
Resume PassarErroEsperar
End Sub
Explicação do código:
Essa é a Série Automação Web onde vamos finalizar a planilha e criar a interação com o usuário para facilitar a utilização da planilha!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Essa é a penúltima aula da Série Automação Web em VBA (Série Automação Web Aula7) e nessa aula eu vou te mostrar como atribuir macro a um botão e fazer a interação VBA com usuário.
Essa interação com o usuário é muito importante para que você consiga melhorar a utilização do seu código, assim ele vai poder utilizar o programa com mais facilidade.
Então vou te mostrar como:
Atribuindo a macro a um botão (já criado)
Para atrelar o código ao nosso botão, no Excel, clique com o botão direito do mouse no botão, vamos em atribuir macro -> procure pela macro -> ComparadorDePreco.
Em seguida, clique na macro e em OK.
Pronto. Agora basta clicar com o botão esquerdo do mouse no botão, que o código irá rodar.
Utilizando MsgBox no começo (Sim e Não)
resp = MsgBox("Você realmente quer rodar o código?", vbYesNo)
If resp <> 6 Then Exit Sub
As duas linhas de código acima estão inseridas no começo da nossa macro e são responsáveis por:
Resultado da MsgBox criada no começo:
Utilizando MsgBox no final (nome do produto com preço atingido)
If menorPreco < Cells(lin, 5).Value Then
MsgBox ("O produto " & Cells(lin, 2).Value & " atingiu o preço alvo!")
End If
As três linhas de código acima foram inseridas no final da nossa macro e são responsáveis por:
Resultado da MsgBox do final:
Função NOW para registrar o momento da busca de preços
Cells(3, 1).Value = Now
Essa simples linha de código acima, que foi inserida no começo da nossa macro, logo após a resposta de rodar ou não a macro, é responsável por:
Resultado:
Essa é a Série Automação Web Aula 8, nessa aula vou te mostrar como executar uma macro de forma automática em períodos determinados!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber por e-mail o(s) arquivo(s) utilizados na aula, preencha:
Fala, pessoal! Essa aqui é a última aula da Série Automação Web em VBA – Aula 8! Nela nós vamos finalizar nosso projeto Web scraping VBA.
Você vai aprender como executar macro em períodos determinados. Como assim?
Você vai aprender a como executar macro automaticamente todos os dias, por semana ou mensalmente.
Já imaginou a macro rodar diariamente de forma automática para poder fazer suas buscas de preço?
Sem ter que abrir o Excel e rodar macros VBA de forma manual?
Ficou curioso? Bora pra aula que o conteúdo está irado!
Disparar macro ao abrir a planilha: evento de abertura
Para fazer com que a nossa macro rode automaticamente ao abrir a planilha, deveremos utilizar um evento no VBA, mais especificamente, estamos falando de um evento de abertura da planilha.
Um evento nada mais é do que um acontecimento que vai fazer alguma(s) ação(ões) disparar no nosso código.
Com o VBA aberto, vamos programar um evento Workbook_Open da forma mostrada abaixo, clicando duas vezes no menu à esquerda em “EstaPastaDeTrabalho”, e colocando o seguinte código:
O comando Call vai “chamar” a nossa Macro criada ComparadorDePreco para funcionar/rodar, fazendo com que no ato de abrir a planilha, a nossa macro passe a funcionar.
OBS: Para rodar a macro desconsiderando a caixa inicial que pergunta se quer rodar o código ou não, podemos comentar as duas linhas abaixo, ou retirá-las do código:
'resp = MsgBox("Você realmente quer rodar o código?", vbYesNo)
'If resp <> 6 Then Exit Sub
Executar macro periodicamente: Agendador de tarefas do Windows
Você não pode rodar uma macro de um arquivo fechado. Você terá que, nesse caso, abrir o arquivo de alguma forma para que ele rode os códigos.
Terá que fazer isso para você mesmo abrir (lembrete em alguma agenda, ou de cabeça), ou você programar o seu computador para fazer, que é o objetivo da aula de hoje, te mostrar como fazer.
Caso seu computador seja um Windows, existe uma ferramenta chamada Task Scheduler/Agendador de tarefas que pode te ajudar nesse desafio.
Ele vai abrir o arquivo para você, no tempo/intervalo especificado.
Na planilha, temos que programar um evento Workbook_Open para que o código seja executado toda vez que a planilha se abrir, como foi explicado acima.
Para configurar o agendador para rodar uma tarefa, devemos:
start Excel.exe “C:/pasta/pasta/pasta/arquivo.xlsm”
Salvá-lo como um arquivo .bat, pois só assim ele vai ser lido corretamente
Abrir o agendador de tarefas pelo Menu Iniciar do Windows e configurar a abertura desse arquivo .bat da seguinte forma:
Ir em Ação > Criar Tarefa Básica
Colocar um nome intuitivo e uma descrição > Avançar
Definir a periodicidade (escolheremos no exemplo “uma vez”) > Avançar
Definir data e horário para execução > Avançar
Iniciar um programa
Procurar o arquivo .bat em questão para ser script/programa (criado no começo) > Avançar
Concluir
Pronto! O agendador foi configurado e vai abrir o arquivo.bat na data e hora agendadas, e consequentemente abrir a sua planilha e executar a busca de preços!
Fechar a planilha automaticamente
Uma possibilidade interessante que você pode querer é fechar a planilha automaticamente após a verificação de preços automática.
O comando abaixo (colocado como comentário no código) vai te permitir fechar a planilha sem salvar as mudanças:
‘Thisworkbook.Close False
OBS: Para salvar as mudanças com os últimos preços encontrados troque “False” por “True”.
Você sabe criar um código que verifica os preços de um produto a sua escolha até que chegue ao preço que você quer pagar?
Como fazer com que o código compare os preços reservando sempre o menor valor e te informe a loja com o menor preço todo dia, toda semana ou que faça a pesquisa mensalmente?
Preparei esta série para te ensinar a criar esse código do ZERO, então, enquanto você aprende a construir essa ferramenta vai passar por diversos códigos e conceitos importantes em VBA!
Espero que gostem! Até mais!
Para acessar outras publicações de VBA, clique aqui!
Expert em VBA e Power BI da Hashtag Treinamentos. Auxilia no suporte aos alunos da Hashtag Treinamentos e na criação de conteúdos para os que acompanham nossos canais.