Macro când se schimbă celula Excel - Sfaturi Excel

Cuprins

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

Articole interesante...