Számos olvasó feltett olyan kérdéseket, amelyek megkövetelik, hogy az Excel futtasson egy makrórészt minden alkalommal, amikor az érték megváltozik az Excel táblázatban.
Először is, a továbbfejlesztett módszer, amely csak az XL97-ben érhető el: Az Excel 97 rendelkezik néhány új eseménykezelővel, amelyek lehetővé teszik a makrók futtatását minden egyes cellaváltáskor.
Tegyük fel, hogy bármikor 100-nál nagyobb értéket ad meg az A oszlopba, a mellette lévő cellát pirosra akarja formázni.
- Nyissa meg a Visual Basic szerkesztést (Eszközök> Makró> Visual Basic Editor)
- A bal oldali ablakban kattintson a jobb gombbal a Sheet1 elemre, és válassza a Kód megtekintése lehetőséget.
- A Book1 - Sheet1 Code párbeszédpanel tetején két legördülő menü található. A bal oldali legördülő menüből válassza a Munkalap lehetőséget. A jobb oldali legördülő menüből válassza a Módosítás lehetőséget.
-
Írja be a következő kódsorokat:
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
A cella értékének megváltoztatásakor ez a makró futtatásra kerül. A Target változó megmondja, hogy melyik cella és a cella új értéke. Meglepő módon ennek a módszernek a használata nem lassítja jelentősen a folyamatot.
Ne feledje, hogy a makró addig marad aktív, amíg a munkalap nyitva van, vagy amíg egy makrót futtat a következő sorral:
Application.EnableEvents = False
/ p> Excel 95 / 7.0 verzióban: Az OnEntry metódust kell használnia. Megad egy makrót, amelyet futtatni kíván bármely érték megadása után. Ebben az esetben az Application.Caller változó tartalmazza a megváltozott címet és értéket. Írja be a következőket egy új modulba:
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
Az OnEntry ellenőrzése addig marad aktív, amíg egy makrót nem futtat a következő kóddal:
Worksheets("Sheet1").OnEntry = False