Como executar uma macro quando algumas células são alteradas no Excel

Observação

O Office 365 ProPlus está sendo renomeado como Microsoft 365 Apps para empresas. Para obter mais informações sobre essa mudança, leia esta postagem de blog.

Resumo

No Microsoft Excel, você pode criar uma macro que é chamada somente quando um valor é inserido na célula de uma planilha específica ou de qualquer planilha que esteja atualmente aberta.

Porém, observe que você não deve chamar macros desnecessariamente, pois elas diminuem o desempenho do Excel.

Mais informações

A Microsoft fornece exemplos de programação apenas por questões ilustrativas, sem garantias expressas ou implícitas. Isso inclui, mas não está limitado a, as garantias implícitas de qualidade comercial ou conformidade para uma determinada finalidade. Este artigo pressupõe que você conhece a linguagem de programação demonstrada e também as ferramentas usadas para criar e depurar procedimentos. Os engenheiros de suporte da Microsoft podem ajudá-lo, fornecendo a explicação da funcionalidade de determinado procedimento, mas não modificarão estes exemplos para fornecer funcionalidade adicional nem criarão procedimentos específicos para atender às suas necessidades específicas. Em muitos casos, uma macro deve ser executada somente quando um certo número de células contém valores inseridos (chamadas de "células chave" neste documento). Para impedir que uma macro grande seja executada sempre que um valor for inserido em uma célula de uma planilha, verifique se a propriedade ActiveCell é uma das células principais. Para fazer isso, use o método Intersect em ActiveCell e o intervalo que contém as células-chave para verificar se a propriedade ActiveCell é uma das células-chave. Se a propriedade ActiveCell estiver no intervalo que contém as células-chave, você poderá chamar a macro.

Para criar a macro do Visual Basic:

  1. Clique com o botão direito do mouse em Planilha1 e clique em Exibir Código.

    A planilha de módulo atrás de Planilha1 é aberta.

  2. Digite o seguinte código na planilha de 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 Retornar ao Microsoft Excel no menu Arquivo.

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