Macro quando cambia la cella di Excel - Suggerimenti per Excel

Sommario

Diversi lettori hanno posto domande che richiedono che Excel esegua una sezione di macro ogni volta che un valore cambia nel foglio di calcolo di Excel.

Innanzitutto, il metodo migliorato disponibile solo in XL97: Excel 97 ha alcuni nuovi gestori di eventi che consentono di eseguire una macro ogni volta che una cella cambia.

Diciamo che ogni volta che viene inserito un valore maggiore di 100 nella colonna A, si desidera formattare la cella accanto ad esso in modo che sia rossa.

  • Apri la modifica di Visual Basic (Strumenti> Macro> Visual Basic Editor)
  • Nella finestra di sinistra, fare clic con il pulsante destro del mouse su Sheet1 e selezionare Visualizza codice.
  • Nella parte superiore della finestra di dialogo Book1 - Sheet1 Code, sono presenti due elenchi a discesa. Dal menu a discesa a sinistra selezionare Foglio di lavoro. Dal menu a discesa a destra, seleziona Modifica.
  • Immettere le seguenti righe di codice:

    Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Target.Column = 1 Then ThisRow = Target.Row If Target.Value> 100 Then Range("B" & ThisRow).Interior.ColorIndex = 3 Else Range("B" & ThisRow).Interior.ColorIndex = xlColorIndexNone End If End If End Sub

Ogni volta che viene modificato un valore in una cella, verrà eseguita questa macro. La variabile Target ti dirà quale cella e il nuovo valore della cella. Sorprendentemente, l'utilizzo di questo metodo non rallenta in modo significativo il processo.

Nota che la macro rimarrà attiva finché il foglio di lavoro è aperto o finché non esegui una macro con la seguente riga:

Application.EnableEvents = False

/ p> In Excel 95 / 7.0: è necessario utilizzare il metodo OnEntry. Si specifica una macro che si desidera eseguire dopo aver immesso qualsiasi valore. In questo caso, la variabile Application.Caller contiene l'indirizzo e il valore che sono cambiati. Immettere quanto segue in un nuovo modulo:

Sub AutoOpen() Worksheets("Sheet1").OnEntry = "CheckIt" End Sub Sub CheckIt() If Application.Caller.Column = 1 Then ThisRow = Application.Caller.Row If Application.Caller.Value> 100 Then Range("B" & ThisRow).Interior.ColorIndex = 3 Else Range("B" & ThisRow).Interior.ColorIndex = xlColorIndexNone End If End If End Sub

Il controllo di OnEntry rimarrà attivo finché non si esegue una macro con il codice seguente:

Worksheets("Sheet1").OnEntry = False

Articoli interessanti...