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
- Aula 1 – Série Automação Web – Apresentando a Série
- Aula 2 – Planilha e Lógica de Programação
- Aula 3 – Buscar Preço de um Produto na Web
- Aula 4 – Incluindo Novas Lojas na Busca de Preços
- Aula 5 – Tratamento de Erros (On Error GoTo)
- Aula 6 – Estrutura de Repetição For Next no VBA
- Aula 7 – Interação com o Usuário
- Aula 8 – Executar Macro em Períodos Determinados
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!
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!
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!
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:
- 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.
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!
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
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!
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
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:
- 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
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
- 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
- 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
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.
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:
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:
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:
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:
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
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”.
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!
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.