Blog

Postado em em 27 de agosto de 2021

Série Automação Web com VBA

Quer aprender sobre Automação Web em VBA em uma série de 8 aulas? Eu vou te mostrar desde a construção do código até a execução da macro em períodos determinados!

Aulas disponíveis

Série Automação Web com VBA – Apresentando a Série

Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!

Automação Web com VBA

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.

Imagem0

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!
Imagem1 5

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.

Série Automação WEB Aula1
Série Automação WEB Aula1

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!

Voltar ao índice

Aula 2 – Planilha e Lógica de Programação

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!

Automação Web com VBA

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:

Série Automação Web Aula2

Lembrando que vamos:

  • Centralizar, formatar com preenchimento azul escuro e fonte branca os textos dos cabeçalhos
  • Colocar borda na tabela, onde entrarão os dados
  • Tirar as linhas de grade da aba (Guia Exibir)

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”).

  • Para isso, iremos na nossa planilha na guia Inserir > Ilustrações > Formas > Retângulo: Cantos Arredondados (2º ícone da categoria de Retângulos). A partir dessa escolha, redimensione a ilustração de acordo com o seu gosto, e pronto.
  • Após isso, vamos personalizar o botão. Para isso, iremos dar um clique com o botão esquerdo do mouse nele, e escreveremos o que desejamos nele. No nosso exemplo, escrevemos “Rodar Verificação”, fomos na guia Página Inicial, e botamos o alinhamento no meio e centralizamos o texto, além de colocar em negrito.
  • Para finalizar, iremos colocar um sombreamento, indo em Formato de Formato > Efeitos de Forma > Predefinição > Predefinições > Predefinição 2.

Salvar arquivo habilitado para macro

Para salvar a planilha com o formato .xlsm, você deve:

  • Ir em Arquivo > Salvar como > Modificar o formato do arquivo para Pasta de Trabalho Habilitada para Macro do Excel (*.xlsm).

A outra forma é mostrada no vídeo, equivalente a essa apresentada aqui.

Voltar ao índice

Aula 3 – Buscar Preço de um Produto na Web

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!

Automação Web com VBA

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:

  • criar o objeto Internet Explorer
  • vamos acessar um site
  • dentro desse site vamos verificar onde está a informação de preço que estamos buscando.

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

  • Vamos “setar” uma variável chamada “objIE” que representará o objeto do programa do Internet Explorer em si, que vai ser criado no começo
  • Vamos fazer com que o objIE fique visível, para podermos ver o resultado do código nele, colocando sua propriedade Visible como True
  • Enfim, vamos fazer o Internet Explorer de fato ir até a página (método Navigate) informada pelo link que será representado pelo link do produto como texto. Ele será responsável por entrarmos nesse site específico e buscar o valor do produto daquela página
  • Vamos armazenar na variável precoProduto (recomendo ler a linha da direita para a esquerda) o texto interno obtido do elemento de ID “priceblock_ourprice” da página acessada (através do link) pelo Internet Explorer (objIE)
  • Em seguida aplicaremos o método Quit na variável que representa o Internet Explorer (objIE) para que ele seja fechado
  • Por boas práticas vamos esvaziar a variável “objIE” (Nothing) para que ela não fique armazenada o tempo inteiro na memória do computador enquanto o arquivo está aberto no Excel
  • Se encerra o código

OBS: Para entender melhor como lidar com as variáveis ou mais detalhes sobre o comando Set no VBA, recomendamos esse outro post.

Voltar ao índice

Aula 4 – Incluindo Novas Lojas na Busca de Preços

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!

Automação Web em VBA

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:

  • substituir informações no VBA (com a função replace no VBA) para remover o R$ do preço, porque ele já vem no formato de texto e não número
  • converter para Double no VBA, pois como as informações foram obtidas no formato de texto, nós não conseguimos fazer operações com texto, então precisamos converter em número
  • descobrir o mínimo no VBA dessas 3 informações

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

  • Vamos “setar” uma variável chamada “objIE” que representará o objeto do programa do Internet Explorer em si, que vai ser criado no começo
  • Vamos fazer com que o objIE fique visível, para podermos ver o resultado do código nele, colocando sua propriedade Visible como True
  • Enfim vamos fazer o Internet Explorer de fato ir até a página (método Navigate) informada pelo link que será representado pelo link do produto como texto. Ele será responsável por entrarmos nesse site específico e buscar o valor do produto daquela página, que primeiramente representa o produto na loja da Amazon
  • Vamos armazenar na variável precoProdutoAm o texto interno obtido do elemento de ID “priceblock_ourprice” da página acessada (através do link do produto da Amazon) pelo Internet Explorer (objIE)
  • Repare que usamos uma função para converter para número, a função CDbl (converter para Double no VBA), porque para essa variável é retornado um texto por padrão. Além disso, tivemos que substituir informações no VBA: “R$ “ por “ ” (nada), através da função Replace no VBA.
  • Em seguida navegamos para o site do produto nas Lojas Americanas, e repetimos o processo descrito acima, armazenando o valor na variável precoProdutoLA.
  • Se atente, pois, no caso das Lojas Americanas, o produto é acessado pela sua classe “src__BestPrice-sc-1jvw02c-5 cBWOIB priceSales” (ByClassName), e ele é o primeiro elemento da classe: correspondência 0.
  • Em seguida navegamos para o site do produto na loja Magazine Luiza, e repetimos o processo descrito acima, armazenando o valor na variável precoProdutoML, com a exceção da função de tirar o “R$ “, porque nesse caso o número vem como texto, sem o ”R$”.
  • Novamente observe que no caso das Lojas Americanas, o produto é acessado pela sua classe ” price-template__text” (ByClassName), e ele é o primeiro elemento da classe: correspondência 0.
  • Tendo então os três valores buscados em cada loja, vamos fazer a comparação de qual é o menor valor entre eles, usando a função MÍNIMO (Min). O menor valor será armazenado na variável “menorPreco”
  • Em seguida aplicaremos o método Quit na variável que representa o Internet Explorer (objIE) para que ele seja fechado
  • Por boas práticas vamos esvaziar a variável “objIE” (Nothing) para que ela não fique armazenada o tempo inteiro na memória do computador enquanto o arquivo está aberto no Excel
  • Se encerra o código

Voltar ao índice

Aula 5 – Tratamento de Erros (On Error GoTo)

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

  • Vamos “setar” uma variável chamada “objIE” que representará o objeto do programa do Internet Explorer em si, que vai ser criado no começo
  • Vamos fazer com que o objIE fique visível, para podermos ver o resultado do código nele, colocando sua propriedade Visible como True
  • Enfim vamos fazer o Internet Explorer de fato ir até a página (método Navigate) informada pelo link que será representado pelo link do produto como texto. Ele será responsável por entrarmos nesse site específico e buscar o valor do produto daquela página, que primeiramente representa o produto na loja da Amazon
  • Antes de armazenar o que for encontrado pela navegação do objIE para o site da Amazon, vamos acrescentar uma label “PassarErroEsperar:”, que representa o começo da estrutura do nosso tratamento de erro (label de retorno do erro).
  • Lembrando que o nosso erro se dá pelo fato de o código não dar tempo suficiente da página ser carregada para pegar o preço do produto
  • Na parte debaixo do código ficará a nossa label propriamente dita de tratamento do erro (label de ida). Observe:
On Error GoTo Label
  • A ordem é a seguinte: se o erro acontecer, o comando “On Error GoTo Esperar” vai forçar o código a pular todas as linhas imediatamente abaixo dela até onde está a nossa label “Esperar:”, lá embaixo…
  • Estando lá embaixo, vamos fazer o Excel esperar 1 segundo com o comando Wait associado com a função Now (função AGORA no Excel) somada a 1 segundo dado pela função TimeValue, e através do comando “Resume” voltaremos à label inicial de PassarErroEsperar, para que o código possa prosseguir sem erro, com a página já carregada completamente.
  • O comando que fecha o nosso tratamento é o “On Error GoTo 0”, responsável por desabilitar qualquer comando de tratamento de erros aplicado no código, e retornará ao tratamento de erros normal do VBA, com as caixas de erro e as justificativas.
  • Resumindo ele atua autorizando os erros a acontecerem e desabilita o comando aplicado de “On Error GoTo Label” criado anteriormente, porque podem existir outros erros além desses e podemos querer entendê-los.
  • Vamos repetir essa mesma estrutura de tratamento de erros para o precoProdutoLA e para o precoProdutoML, com outras Labels (PassarErroEsperar1, Esperar1, PassarErroEsperar2 e Esperar2)
  • Vamos armazenar na variável precoProdutoAm o texto interno obtido do elemento de ID “priceblock_ourprice” da página acessada (através do link do produto da Amazon) pelo Internet Explorer (objIE)
  • Repare que usamos uma função para converter para número, a função CDbl (converter para Double no VBA), porque para essa variável é retornado um texto por padrão. Além disso, tivemos que substituir informações no VBA: “R$ “ por “” (nada), através da função Replace no VBA.
  • Em seguida navegamos para o site do produto nas Lojas Americanas, e repetimos o processo descrito acima, armazenando o valor na variável precoProdutoLA.
  • No caso das Lojas Americanas, o produto é acessado pela sua classe “src__BestPrice-sc-1jvw02c-5 cBWOIB priceSales” (ByClassName), e ele é o primeiro elemento da classe: correspondência 0.
  • Em seguida vamos navegar para o site do produto na loja Magazinie Luiza, e repetir o processo descrito acima, e armazenaremos o valor na variável precoProdutoML, com a exceção da função de tirar o “R$ “, porque nesse caso o número vem como texto, sem o “R$”.
  • No caso das Lojas Americanas, o produto é acessado pela sua classe ” price-template__text” (ByClassName), e ele é o primeiro elemento da classe: correspondência 0.
  • Tendo então os três valores buscados em cada loja, vamos fazer a comparação de qual é o menor valor entre eles, usando a função MÍNIMO (Min). O menor valor será armazenado na variável “menorPreco”
  • Em seguida aplicaremos o método Quit na variável que representa o Internet Explorer (objIE) para que ele seja fechado
  • Por boas práticas vamos esvaziar a variável “objIE” (Nothing) para que ela não fique armazenada o tempo inteiro na memória do computador enquanto o arquivo está aberto no Excel
  • Se encerra o código

Voltar ao índice

Aula 6 – Estrutura de Repetição For Next no VBA

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:

  • Nós vamos nos ater a explicação da parte de iteração da estrutura de repetição For Next no VBA
  • Começaremos pegando a última linha (ultLin) preenchida da nossa planilha, indo na linha 1000000 e coluna B e dando um Ctrl seta para cima. Pegaremos a linha em que o Excel selecionar, que representará a última linha (da célula) preenchida da coluna B
  • Vamos iniciar nossa primeira estrutura de repetição For apontando que queremos percorrer da linha 2 da nossa planilha (primeiro produto) até a última linha da planilha, dada pela variável ultLin
  • Vamos definir a variável menorPreco no início como vazio, para que ela seja objeto de comparação mais para frente no código
    Imagem1
  • Levando em consideração as correspondências dadas pelas colunas, sendo A = 1 e crescendo uma unidade a cada letra, queremos percorrer da coluna 6 até a coluna 8, onde se encontram os links das nossas lojas
  • Então inicia-se a nossa 2ª estrutura de repetição For Next no VBA, que vai percorrer essas colunas a cada volta do loop.
  • Vamos navegar, a cada coluna (col) alvo, e cada linha (lin) alvo, navegando até aquela página, fazer o tratamento de erros caso a página ainda não esteja pronta e carregada para ter a informação retirada de forma completa
  • Usaremos de uma estrutura de comparação If que vai ler a variável col a fim de entender qual a loja, e qual link acessar, especificamente.
  • Estando na coluna 6, vamos acessar o link da Amazon; estando na coluna 7 vamos acessar o link das Lojas Americanas; estando na coluna 8 vamos acessar o link da Magazine Luiza
  • A cada acesso vamos armazenar o preço obtido daquele site/link na variável (única dessa vez) precoProduto
  • Em seguida fazemos duas comparações através da Estrutura If:
  • a) se o preço é vazio, vamos armazenar o preço encontrado inicialmente na variável menorPreco, porque ele será o menor preço se comparado a vazio
  • Após a primeira volta da primeira linha de produto (após a 2ª linha da tabela) e a primeira coluna de links (coluna 6), vamos ter um segundo precoProduto conseguido porque estaremos analisando o mesmo produto em questão, só que para a 2ª e a 3ª loja.
  • Então, precisaremos comparar esse “novo” precoProduto a cada loja com o menorPreco da 1ª loja, ou a cada iteração da mesma linha (cada produto)
  • A partir do estabelecimento de um menorPreco, registraremos na variável lojaMenorPreco o nome da loja que detém o menor preço encontrado, representada pela mesma coluna em questão daquele preço e volta do loop, e 1ª linha da tabela.
  • Assim, poderemos ir para a próxima coluna, pegar novos preços, fazer novas comparações de menorPreco
  • Ao final das iterações nas colunas (lojas):
    • vamos registrar na linha do produto em questão (variável lin), na coluna 3 (coluna C) o menorPreco encontrado entre as 3 lojas, para aquele produto
    • vamos registrar na linha do produto em questão (variável lin), na coluna 4 (coluna D) a lojaMenorPreco encontrado entre as 3 lojas, para aquele produto
Imagem2
  • Assim poderemos ir para a próxima linha, ou seja, novo produto, percorrer novamente as colunas das lojas, até que se encerrem as linhas de produtos
  • E assim o código se encerra normalmente, como nas últimas

Voltar ao índice

Aula 7 – Interação com o Usuário

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:

  • como atribuir a macro a um botão
  • utilizar o MsgBox no VBA
  • caixa de mensagem no VBA para que o usuário consiga escolher se quer rodar o código ou não
  • validações com a função If no VBA
  • utilizar a função Now no VBA (função AGORA no VBA) para registrar o momento em que estamos fazendo a busca de preços.

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.

Série Automação Web Aula8

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:

  • Vamos armazenar a resposta (na variável “resp”) do clique em “Sim” ou “Não” na MsgBox criada e chamada para perguntar “Você realmente quer rodar o código?”
  • Faremos uma verificação com uma estrutura If para ver se a resposta (variável resp) for diferente do número 6 (resposta padrão Sim para caixa de mensagem criada anteriormente) abortaremos o código (comando Exit Sub)

Resultado da MsgBox criada no começo:

Caixa de mensagem no VBA com opções
Caixa de mensagem no VBA com opções
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:

  • Fazer uma verificação com uma estrutura If para ver se a resposta da variável menorPreco (encontrada pelo nosso código) será menor do que o valor encontrado na mesma linha de código do produto da vez, mas na 5ª coluna (preço alvo do produto), invocaremos uma caixa de mensagem VBA
  • Vamos invocar uma MsgBox criada e chamada para informar que “O produto ” & Cells(lin, 2).Value & ” atingiu o preço alvo!”, sendo que o produto será o texto que estará armazenado na variável lin e na 2ª coluna da nossa planilha.

Resultado da MsgBox do final:

Série Automação Web Aula8
Caixa de mensagens no VBA
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:

  • Armazenar na célula da terceira linha, e da primeira coluna (em outras palavras, na célula A3) a informação com a data e hora atuais, pela função Now no VBA

Resultado:

Função AGORA no VBA
Função AGORA no VBA

Voltar ao índice

Aula 8 – Executar Macro em Períodos Determinados

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:

Série Automação Web Aula8

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:

  • Criar um arquivo com extensão .bat com o seguinte texto:
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

Série Automação Web Aula8

Colocar um nome intuitivo e uma descrição > Avançar

Definir a periodicidade (escolheremos no exemplo “uma vez”) > Avançar
Periodicidade

Definir data e horário para execução > Avançar
DataHora

Iniciar um programa
TipoTarefa

Procurar o arquivo .bat em questão para ser script/programa (criado no começo) > Avançar
arquivobat

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

Voltar ao índice

Conclusão da Série Automação WEB com VBA

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!

Hashtag Treinamentos

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


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

Quer ter acesso a um Minicurso de Finanças no Excel de forma 100% gratuita? Preencha seu e-mail abaixo!