Makro när Excel-celler ändras - Excel-tips

Innehållsförteckning

Flera läsare har ställt frågor som kräver att Excel kör ett avsnitt av makro varje gång ett värde ändras i Excel-kalkylbladet.

För det första har den förbättrade metoden endast tillgänglig i XL97: Excel 97 har några nya händelsehanterare som gör att ett makro kan köras varje gång en cell ändras.

Låt oss säga att när som helst ett värde större än 100 anges i kolumn A, vill du formatera cellen bredvid den för att vara röd.

  • Öppna Visual Basic Edit (Verktyg> Makro> Visual Basic Editor)
  • Högerklicka på Sheet1 i det vänstra fönstret och välj Visa kod.
  • Högst upp i dialogrutan Book1 - Sheet1 Code finns det två rullgardinsmenyer. Välj Kalkylark från vänster rullgardinsmeny. Välj Ändra från höger rullgardinsmeny.
  • Ange följande kodrader:

    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

Varje gång ett värde i en cell ändras körs detta makro. Variabeln Target berättar vilken cell och det nya värdet för cellen. Överraskande saktar inte processen väsentligt av att använda denna metod.

Observera att makrot förblir aktivt så länge kalkylbladet är öppet eller tills du kör ett makro med följande rad i:

Application.EnableEvents = False

/ p> I Excel 95 / 7.0: Du måste använda OnEntry-metoden. Du anger ett makro som du vill ska köras efter att något värde har angetts. I det här fallet innehåller variabeln Application.Caller adressen och värdet som ändrats. Ange följande 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 förblir aktiv tills du kör ett makro med följande kod:

Worksheets("Sheet1").OnEntry = False

Intressanta artiklar...