Makro når Excel-celleændringer - Excel-tip

Indholdsfortegnelse

Flere læsere har stillet spørgsmål, som kræver, at Excel kører et afsnit af makro, hver gang en værdi ændres i Excel-regnearket.

For det første har den forbedrede metode kun tilgængelig i XL97: Excel 97 har nogle nye hændelsesbehandlere, der gør det muligt at køre en makro hver gang en celle ændres.

Lad os sige, at når som helst en værdi større end 100 indtastes i kolonne A, vil du formatere cellen ud for den til at være rød.

  • Åbn Visual Basic Edit (Værktøjer> Makro> Visual Basic Editor)
  • I venstre vindue skal du højreklikke på Ark1 og vælge Vis kode.
  • Øverst i dialogboksen Book1 - Sheet1 Code er der to rullelister. Vælg Arbejdsark fra venstre rullemenu. Vælg Skift fra højre rullemenu.
  • Indtast følgende linjer kode:

    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 værdi i en celle ændres, køres denne makro. Variablen Target fortæller dig, hvilken celle og den nye værdi af cellen. Overraskende nok bremser processen ikke signifikant ved at bruge denne metode.

Bemærk, at makroen forbliver aktiv, så længe regnearket er åbent, eller indtil du kører en makro med følgende linje i:

Application.EnableEvents = False

/ p> I Excel 95 / 7.0: Du skal bruge OnEntry-metoden. Du angiver en makro, som du vil køre, efter at en værdi er indtastet. I dette tilfælde indeholder variablen Application.Caller den adresse og værdi, der er ændret. Indtast følgende i et nyt 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-kontrol forbliver aktiv, indtil du kører en makro med følgende kode:

Worksheets("Sheet1").OnEntry = False

Interessante artikler...