Flere lesere har stilt spørsmål som krever at Excel kjører en del av makroen hver gang en verdi endres i Excel-regnearket.
For det første har den forbedrede metoden kun tilgjengelig i XL97: Excel 97 har noen nye hendelsesbehandlere som lar en makro kjøres hver gang en celle endres.
La oss si at når som helst en verdi større enn 100 er angitt i kolonne A, vil du formatere cellen ved siden av den til å være rød.
- Åpne Visual Basic Edit (Verktøy> Makro> Visual Basic Editor)
- Høyreklikk Ark 1 i venstre vindu og velg Vis kode.
- Øverst i dialogboksen Book1 - Sheet1 Code er det to rullegardiner. Velg Arbeidsark fra venstre rullegardin. Velg Endre fra høyre rullegardin.
-
Skriv inn følgende kodelinjer:
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
Hver gang en verdi i en celle endres, kjøres denne makroen. Variabelen Target vil fortelle deg hvilken celle og den nye verdien til cellen. Overraskende nok reduserer ikke prosessen betydelig ved å bruke denne metoden.
Merk at makroen forblir aktiv så lenge regnearket er åpent eller til du kjører en makro med følgende linje i:
Application.EnableEvents = False
/ p> I Excel 95 / 7.0: Du må bruke OnEntry-metoden. Du angir en makro som du vil kjøre etter at en verdi er angitt. I dette tilfellet inneholder variabelen Application.Caller adressen og verdien som endret seg. Skriv inn følgende i en ny modul:
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-kontroll vil forbli aktiv til du kjører en makro med følgende kode:
Worksheets("Sheet1").OnEntry = False