Come eseguire una macro quando alcune celle cambiano in Excel

Riepilogo

In Microsoft Excel, è possibile creare una macro che viene eseguita solo quando viene immesso un valore in una cella in un particolare foglio o in qualsiasi foglio attualmente aperto.

Tenere presente, tuttavia, che non si dovrebbero eseguire macro se non è necessario, perché rallentano le prestazioni di Excel.

Ulteriori informazioni

Microsoft fornisce esempi di programmazione a scopo puramente illustrativo, senza alcuna garanzia di qualsiasi tipo, sia espressa che implicita, ivi incluse, senza limitazioni, le garanzie implicite di commerciabilità o idoneità per uno scopo particolare. In questo articolo si presuppone che l'utente conosca il linguaggio di programmazione in questione e gli strumenti utilizzati per creare ed eseguire il debug delle procedure. Gli esperti Microsoft sono autorizzati a fornire spiegazioni in merito alla funzionalità di una particolare routine, ma in nessun caso a modificare questi esempi per fornire funzionalità aggiuntive o a creare routine atte a soddisfare specifiche esigenze. In molti casi, una macro deve essere eseguita solo quando un determinato numero di celle hanno valori immessi in esse (denominati come "celle chiave" in questo documento). Per evitare che una macro di grandi dimensioni venga eseguita ogni volta che viene immesso un valore in una cella di un foglio, è necessario verificare se ActiveCell è una delle celle chiave. A tale scopo, utilizzare il metodo Intersect su ActiveCell e l'intervallo contenente le celle chiave per verificare che ActiveCell sia una delle celle chiave. Se ActiveCell si trova nell'intervallo che contiene le celle chiave, è possibile chiamare la macro.

Per creare la macro di Visual Basic:

  1. Fare clic con il pulsante destro del mouse sulla scheda Foglio1 e quindi scegliere Visualizza codice.

    Viene aperto il foglio del modulo per Foglio1.

  2. Nel modulo digitare il seguente codice:

    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. Fare clic su Chiudi e torna a Microsoft Excel dal menu File.

Quando si digita una voce nelle celle A1:C10 del Foglio1, viene visualizzata una finestra di messaggio.