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

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *