Macro quando a célula do Excel muda - Dicas do Excel

Índice

Vários leitores fizeram perguntas que exigem que o Excel execute uma seção da macro toda vez que um valor muda na planilha do Excel.

Primeiro, o método aprimorado disponível apenas no XL97: o Excel 97 possui alguns novos manipuladores de eventos que permitem que uma macro seja executada sempre que uma célula for alterada.

Digamos que sempre que um valor maior que 100 for inserido na coluna A, você deseja formatar a célula ao lado dele para ser vermelha.

  • Abra a edição do Visual Basic (Ferramentas> Macro> Editor do Visual Basic)
  • Na janela esquerda, clique com o botão direito em Plan1 e selecione Exibir código.
  • Na parte superior da caixa de diálogo Book1 - Sheet1 Code, há dois menus suspensos. No menu suspenso à esquerda, selecione Planilha. No menu suspenso à direita, selecione Alterar.
  • Insira as seguintes linhas de código:

    Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Target.Column = 1 Then ThisRow = Target.Row If Target.Value> 100 Then Range("B" & ThisRow).Interior.ColorIndex = 3 Else Range("B" & ThisRow).Interior.ColorIndex = xlColorIndexNone End If End If End Sub

Sempre que um valor em uma célula é alterado, esta macro será executada. A variável Target dirá qual célula e o novo valor da célula. Surpreendentemente, o uso desse método não retarda significativamente o processo.

Observe que a macro permanecerá ativa enquanto a planilha estiver aberta ou até que você execute uma macro com a seguinte linha:

Application.EnableEvents = False

/ p> No Excel 95 / 7.0: Você precisa usar o método OnEntry. Você especifica uma macro que deseja executar após a inserção de qualquer valor. Nesse caso, a variável Application.Caller contém o endereço e o valor alterado. Insira o seguinte em um novo módulo:

Sub AutoOpen() Worksheets("Sheet1").OnEntry = "CheckIt" End Sub Sub CheckIt() If Application.Caller.Column = 1 Then ThisRow = Application.Caller.Row If Application.Caller.Value> 100 Then Range("B" & ThisRow).Interior.ColorIndex = 3 Else Range("B" & ThisRow).Interior.ColorIndex = xlColorIndexNone End If End If End Sub

A verificação OnEntry permanecerá ativa até que você execute uma macro com o seguinte código:

Worksheets("Sheet1").OnEntry = False

Artigos interessantes...