Mai mulți cititori au pus întrebări care necesită ca Excel să ruleze o secțiune de macro de fiecare dată când o valoare se schimbă în foaia de calcul Excel.
În primul rând, metoda îmbunătățită disponibilă numai în XL97: Excel 97 are câteva noi gestionare de evenimente care permit executarea unei macro de fiecare dată când se schimbă o celulă.
Să presupunem că de fiecare dată când o valoare mai mare de 100 este introdusă în coloana A, doriți să formatați celula de lângă ea pentru a fi roșie.
- Deschideți editarea Visual Basic (Instrumente> Macro> Editor Visual Basic)
- În fereastra din stânga, faceți clic dreapta pe Sheet1 și selectați View Code.
- În partea de sus a casetei de dialog Book1 - Sheet1 Code, există două meniuri derulante. Din meniul derulant din stânga, selectați Foaia de lucru. Din meniul derulant din dreapta, selectați Modificare.
-
Introduceți următoarele linii de cod:
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
De fiecare dată când se schimbă o valoare dintr-o celulă, această macro va fi rulată. Variabila Țintă vă va spune ce celulă și noua valoare a celulei. În mod surprinzător, utilizarea acestei metode nu încetinește semnificativ procesul.
Rețineți că macro-ul va rămâne activ atât timp cât foaia de lucru este deschisă sau până când rulați o macro cu următoarea linie:
Application.EnableEvents = False
/ p> În Excel 95 / 7.0: trebuie să utilizați metoda OnEntry. Specificați o macro pe care doriți să o rulați după introducerea oricărei valori. În acest caz, variabila Application.Caller conține adresa și valoarea care s-au schimbat. Introduceți următoarele într-un nou 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
Verificarea la intrare va rămâne activă până când rulați o macrocomandă cu următorul cod:
Worksheets("Sheet1").OnEntry = False