Macro wanneer Excel-cel verandert - Excel-tips

Inhoudsopgave

Verschillende lezers hebben vragen gesteld die vereisen dat Excel een sectie van een macro uitvoert telkens wanneer een waarde verandert in het Excel-werkblad.

Ten eerste, de verbeterde methode die alleen beschikbaar is in XL97: Excel 97 heeft een aantal nieuwe gebeurtenishandlers waarmee een macro kan worden uitgevoerd elke keer dat een cel verandert.

Laten we zeggen dat elke keer dat een waarde groter dan 100 wordt ingevoerd in kolom A, u de cel ernaast rood wilt opmaken.

  • Open Visual Basic Edit (Tools> Macro> Visual Basic Editor)
  • Klik in het linkervenster met de rechtermuisknop op Sheet1 en selecteer View Code.
  • Bovenaan het dialoogvenster Boek1 - Blad1 Code zijn er twee vervolgkeuzemenu's. Selecteer Werkblad in de vervolgkeuzelijst aan de linkerkant. Selecteer Wijzigen in de vervolgkeuzelijst rechts.
  • Voer de volgende regels code in:

    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

Elke keer dat een waarde in een cel wordt gewijzigd, wordt deze macro uitgevoerd. De variabele Doel zal u vertellen welke cel en de nieuwe waarde van de cel. Verrassend genoeg vertraagt ​​het gebruik van deze methode het proces niet significant.

Merk op dat de macro actief blijft zolang het werkblad open is of totdat u een macro uitvoert met de volgende regel erin:

Application.EnableEvents = False

/ p> In Excel 95 / 7.0: u moet de OnEntry-methode gebruiken. U geeft een macro op die u wilt uitvoeren nadat een waarde is ingevoerd. In dit geval bevat de variabele Application.Caller het adres en de waarde die zijn gewijzigd. Voer het volgende in een nieuwe module in:

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

OnEntry-controle blijft actief totdat u een macro uitvoert met de volgende code:

Worksheets("Sheet1").OnEntry = False

Interessante artikelen...