Como executar uma macro quando certas células mudam no Excel

Resumo

No Microsoft Excel, você pode criar uma macro que é chamada apenas quando um valor é inserido numa célula numa determinada folha de cálculo ou em qualquer folha de cálculo que esteja atualmente aberta.

Note, no entanto, que não deve chamar macros desnecessariamente porque eles prejudicam o desempenho do Excel.

Mais informações

A Microsoft fornece exemplos de programação apenas a título informativo, sem qualquer garantia expressa ou implícita, incluindo, sem limitações, as garantias implícitas de comercialização e/ou adequação a um fim específico. Este artigo pressupõe que o utilizador está familiarizado com a linguagem de programação demonstrada e as ferramentas utilizadas para criar e depurar procedimentos. Os técnicos de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento, mas não modificarão estes exemplos para proporcionarem funcionalidades adicionais nem criarão procedimentos adaptados às suas necessidades específicas. Em muitos casos, uma macro deve ser executada apenas quando um certo número de células tiver valores inseridos nelas (referidas como as "células-chave" neste documento). Para evitar que uma macro grande seja executada sempre que um valor é inserido numa célula de uma folha de cálculo, deve verificar se o ActiveCell é uma das células-chave. Para conseguir isso, use o método Intersect no ActiveCell e o intervalo que contém as células-chave para verificar se o ActiveCell é uma das células-chave. Se o ActiveCell estiver no intervalo que contém as células-chave, pode usar a macro.

Para criar a macro Visual Basic:

  1. Clique com o botão direito do rato no separador Folha1 e clique em Ver Código.

    A folha do módulo atrás da Folha1 é aberta.

  2. Digite o seguinte código na folha do módulo:

    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim KeyCells As Range
    
    ' The variable KeyCells contains the cells that will
        ' cause an alert when they are changed.
        Set KeyCells = Range("A1:C10")
    
    If Not Application.Intersect(KeyCells, Range(Target.Address)) _
               Is Nothing Then
    
    ' Display a message when one of the designated cells has been 
            ' changed.
            ' Place your code here.
            MsgBox "Cell " & Target.Address & " has changed."
    
    End If
    End Sub
    
  3. Clique em Fechar e Voltar ao Microsoft Excel no menu Ficheiro.

Quando digita uma entrada nas células A1:C10 na Folha1, uma caixa de mensagem é exibida.