Vba: como executar uma macro quando o valor de uma célula muda
Você pode usar a seguinte sintaxe no VBA para executar uma macro quando um valor de célula específico for alterado:
Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = " $A$1 " Then
Call MultiplyMacro
End If
End Sub
Este exemplo específico fará com que a macro chamada MultiplyMacro seja executada quando o valor da célula A1 for alterado.
O exemplo a seguir mostra como usar essa sintaxe na prática.
Exemplo: execute uma macro quando o valor de uma célula for alterado usando VBA
Suponha que criemos a seguinte macro chamada MultiplyMacro que multiplica os valores nas células A1 e B1 e exibe os resultados na célula C1 :
SubMultiplyMacro ()
Range(" C1 ") = Range(" A1 ") * Range(" B1 ")
End Sub
Por exemplo, suponha que temos o valor 12 na célula A1 e o valor 3 na célula B1 .
Se executarmos esta macro, receberemos o seguinte resultado:
Agora suponha que queiramos executar esta macro automaticamente sempre que o valor da célula A1 for alterado.
Para fazer isso, podemos clicar com o botão direito no nome da planilha e clicar em Mostrar código :
Na janela de edição de código que aparece, você pode colar o seguinte código:
Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = " $A$1 " Then
Call MultiplyMacro
End If
End Sub
A captura de tela a seguir mostra como fazer isso na prática:
Podemos então fechar o editor VB.
Agora, sempre que alterarmos o valor na célula A1 , a macro chamada MultiplyMacro será executada automaticamente e realizará a multiplicação usando o novo valor na célula A1 .
Por exemplo, suponha que alteremos o valor da célula A1 para 10 . Assim que alterarmos o valor e pressionarmos Enter , a macro será executada:
A macro multiplica 10 por 3 e exibe o resultado na célula C2 .
Nota : Se desejar executar a macro quando uma célula em um intervalo específico for alterada, você pode usar a seguinte sintaxe:
Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range(" A1:B1 ")) Is Nothing Then
Call MultiplyMacro
End If
End Sub
Isso fará com que a macro chamada MultiplyMacro seja executada se alguma célula no intervalo A1:B1 for alterada.
Recursos adicionais
Os tutoriais a seguir explicam como realizar outras tarefas comuns em VBA:
VBA: Como contar o número de planilhas em uma pasta de trabalho
VBA: Como extrair dados de outra pasta de trabalho
VBA: Como adicionar novas planilhas