Pular para o conteúdo

Macro que roda automaticamente

Macro que roda automaticamente

Não há duvidas que as macros são uma grande mão-na-roda no Excel. É possível automatizar relatórios inteiros, sem gerar nenhum grande esforço do usuário.

Mas em muitos casos é preciso apertar algum botão ou algumas teclas de atalho para conseguir executar a macro.

Para te deixar mais preguiçoso, e te poupar milésimos de segundos, removendo a necessidade de apertar qualquer coisa para rodar seu código de macro, existe a possibilidade de fazer suas macros rodarem automaticamente quando:

  • Abrir o arquivo do Excel
  • Fechar o arquivo do Excel
  • Alguma célula específica for alterada
  • Qualquer célula em uma determinada aba for alterada

Antes de começar, um esclarecimento. Sempre que você ver escrito:

  • Manualmente – Significa que o código é executado quando a célula sofre uma alteração manual, intencional do usuário.
  • Via Fórmula – Significa que o código é executado quando a célula sofre uma alteração por conta de uma fórmula, ou seja, outra célula é alterada e a célula observada é alterada por conter uma fórmula que sofre mudanças em seu resultado.

Sem mais delongas, vamos ver como fazer isso.


Rodar macro ao abrir o arquivo do Excel

Abra o editor VBA (Alt + F11).

No menu da esquerda procure por EstaPasta_de_trabalho e selecione dando dois cliques.

Na janela à direita digite o código abaixo:

Private Sub Workbook_Open()
 
 MsgBox "Olá, bom te ver de novo!"
 
End Sub

Conforme a imagem abaixo.

Curioso para saber como alterei as cores no meu código? Clique aqui para saber.

E é apenas isso! Ao inserir a macro Workbook_Open() assim que seu arquivo for aberto o Excel executará o código que estiver ali. seja ele qual for. Neste exemplo aparecerá uma caixa de texto te cumprimentando.

Altere o código para o que deseja que a macro faça e pronto.


Rodar macro ao fechar o arquivo do Excel

Funciona praticamente da mesma forma que a anterior, só muda o nome da macro, veja.

Abra o editor VBA (Alt + F11).

No menu da esquerda procure por EstaPasta_de_trabalho e selecione dando dois cliques.

Na janela à direita digite o código abaixo:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
 
 MsgBox "Tchau, volte sempre!"
 
End Sub

Conforme a imagem abaixo.

Ao inserir este código, sempre antes de fechar seu arquivo o Excel ira automaticamente executar a macro, seja ela qual for. Neste exemplo irá aparecer uma caixa de mensagem dizendo tchau.


Rodar macro quando o conteúdo da célula é alterado (Manualmente)

Abra o editor VBA (Alt + F11).

No menu da esquerda procure pela aba na qual está inserida as células que você deseja rastrear sempre que sofrerem alterações e selecione dando dois cliques. No meu caso utilizei a aba Plan1(Plan1) e defini que a macro deverá ser executada sempre que uma das células do intervalo A1:B2 for alterada manualmente.

Na janela à direita digite o código abaixo:

Private Sub Worksheet_Change(ByVal Target As Range)
 If Intersect(Target, Me.Range("A1:B2")) Is Nothing Then Exit Sub
 MsgBox "Algo mudou!"
End Sub

Conforme a imagem abaixo.

Está pronto, basta alterar manualmente qualquer uma das células do intervalo A1:B2 da aba Plan1 que será executada uma macro que exibirá uma caixa de mensagem, informando que algo mudou.


Rodar macro quando o conteúdo da célula é alterado (Via fórmula ou manualmente)

Abra o editor VBA (Alt + F11).

No menu da esquerda procure pela aba que deseja rastrear, no meu caso utilizei a aba Plan1(Plan1).

Na janela à direita digite o código abaixo:

Na janela à direita digite o código abaixo:

Private Sub Worksheet_Calculate()
 If Range("A1").Value <> PrevVal Then
 MsgBox "Algo mudou!"
 PrevVal = Range("A1").Value
 End If
End Sub

Conforme a imagem abaixo.

Porém para que funcione corretamente outras duas etapas devem ser feitas.

No menu à esquerda onde diz EstaPasta_de_trabalho você deve inserir o seguinte código:

Private Sub Workbook_Open()
 PrevVal = Plan1.Range("A1").Value
End Sub

Ele irá garantir que no momento em que o arquivo for aberto a variável que verifica se a célula A1 da Plan1 guarde o valor atual desta célula eassim que ela for alterada conseguirá fazer a comparação e detectar a mudança.

A segunda e última etapa é criar a variável PrevVal que fará todo este controle.

Crie um módulo (ou utilize um já existente) e insira o seguinte código:

Public PrevVal As Variant

Rodar macro quando um coluna ou linha sofre uma alteração (Manualmente)

Neste exemplo irei mostrar a alteração em 2 colunas, as colunas A e B. O procedimento para linha é o mesmo, basta alterar a palavra Column no código abaixo, por Row e definir as linhas.

Abra o editor VBA (Alt + F11).

No menu da esquerda procure pela aba que deseja rastrear, no meu caso utilizei a aba Plan1(Plan1).

Na janela à direita digite o código abaixo:

Private Sub Worksheet_Change(ByVal Target As Range)
 If Intersect(Target, Me.Columns("A:B")) Is Nothing Then Exit Sub
 MsgBox "Algo mudou!"
End Sub

 


Rodar macro quando determinada célula for selecionada

Este caso irá funcionar sempre que uma célula específica for selecionada. Neste exemplo iremos rastrear a célula A1. Os ‘$’ que aparecem no código são obrigatórios, caso contrário pode não funcionar.

Abra o editor VBA (Alt + F11).

No menu da esquerda procure pela aba que deseja rastrear, no meu caso utilizei a aba Plan1(Plan1).

Na janela à direita digite o código abaixo:

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
 If Target.Address = "$A$1" Then
 Msgbox "Célula selecionada!"
 End If
End Sub

Rodar macro quando qualquer coisa for alterada (Manualmente)

A ideia é a mesma do modelo anterior, mas ao invés de definir um intervalo de colunas ou linhas, iremos definir todas as células como intervalo a ser monitorado.

Abra o editor VBA (Alt + F11).

No menu da esquerda procure pela aba que deseja rastrear, no meu caso utilizei a aba Plan1(Plan1).

Na janela à direita digite o código abaixo:

Private Sub Worksheet_Change(ByVal Target As Range)
 If Intersect(Target, Me.Cells) Is Nothing Then Exit Sub
 MsgBox "Algo mudou!"
 End if
End Sub

Rodar macro quando qualquer coisa for alterada (Via fórmula, não manualmente)

Abra o editor VBA (Alt + F11).

No menu da esquerda procure pela aba que deseja rastrear, no meu caso utilizei a aba Plan1(Plan1).

Na janela à direita digite o código abaixo:

Private Sub Worksheet_Calculate()
 MsgBox "Algo mudou!"
End Sub

Conforme a imagem abaixo.

Está pronto, sempre que alguma coisa for alterada manualmente na Plan1 a macro será executada.

Espero ter ajudado. Qualquer dúvida deixe seu comentário logo abaixo.


Acompanhe o Função Excel
   

2 comentários em “Macro que roda automaticamente”

  1. Olá amigo, boa tarde!

    Ajudou demais, muito obrigado!

    Porém se vc puder eu agradeceria se conseguisse me ajudar um pouco mais: preciso receber um notificação quando o valor de uma célula ficar abaixo de um determinado valor.

    Não consegui fazer isso via Validação de Dados porque a célula é fórmula.

    Desde já agradeço pela ajuda!

  2. Boa tarde!

    Parabéns pelo material, muito bom…

    Seria possível me ajudar com o cogito em que,
    “Toda vez que a hora na celular mudar (Função Agora) uma macro de atualização rodar atualizando toda planilha?

    desde já agradeço!

Deixe um comentário ou uma dúvidaCancelar resposta

Sair da versão mobile