Vba: come eseguire una macro quando cambia il valore di una cella
È possibile utilizzare la seguente sintassi in VBA per eseguire una macro quando cambia il valore di una cella specifica:
Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = " $A$1 " Then
Call MultiplyMacro
End If
End Sub
Questo particolare esempio farà sì che la macro chiamata MultiplyMacro venga eseguita quando cambia il valore della cella A1 .
L’esempio seguente mostra come utilizzare questa sintassi nella pratica.
Esempio: eseguire una macro quando il valore di una cella cambia utilizzando VBA
Supponiamo di creare la seguente macro chiamata MultiplyMacro che moltiplica i valori nelle celle A1 e B1 e visualizza i risultati nella cella C1 :
SubMultiplyMacro ()
Range(" C1 ") = Range(" A1 ") * Range(" B1 ")
End Sub
Ad esempio, supponiamo di avere il valore 12 nella cella A1 e il valore 3 nella cella B1 .
Se eseguiamo questa macro, riceveremo il seguente risultato:
Supponiamo ora di voler eseguire automaticamente questa macro ogni volta che cambia il valore della cella A1 .
Per fare ciò, possiamo fare clic con il tasto destro sul nome del foglio e quindi fare clic su Mostra codice :
Nella finestra di modifica del codice che appare, puoi incollare il seguente codice:
Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = " $A$1 " Then
Call MultiplyMacro
End If
End Sub
Lo screenshot seguente mostra come farlo in pratica:
Possiamo quindi chiudere l’editor VB.
Ora, ogni volta che modifichiamo il valore nella cella A1 , la macro chiamata MultiplyMacro verrà eseguita automaticamente ed eseguirà la moltiplicazione utilizzando il nuovo valore nella cella A1 .
Ad esempio, supponiamo di modificare il valore della cella A1 in 10 . Non appena modifichiamo il valore e premiamo Invio , verrà eseguita la macro:
La macro moltiplica 10 per 3 e visualizza il risultato nella cella C2 .
Nota : se desideri eseguire la macro quando cambia una cella in un intervallo specifico, puoi utilizzare la seguente sintassi:
Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range(" A1:B1 ")) Is Nothing Then
Call MultiplyMacro
End If
End Sub
Ciò farà sì che la macro denominata MultiplyMacro venga eseguita se qualsiasi cella nell’intervallo A1:B1 cambia.
Risorse addizionali
I seguenti tutorial spiegano come eseguire altre attività comuni in VBA:
VBA: come contare il numero di fogli in una cartella di lavoro
VBA: come estrarre i dati da un’altra cartella di lavoro
VBA: come aggiungere nuovi fogli