Makro, kun Excel-solu muuttuu - Excel-vinkkejä

Sisällysluettelo

Useat lukijat ovat esittäneet kysymyksiä, jotka edellyttävät Excelin suorittavan makron osan aina, kun arvo muuttuu Excel-laskentataulukossa.

Ensinnäkin parannettu menetelmä, joka on saatavana vain mallissa XL97: Excel 97: ssä on joitain uusia tapahtumankäsittelijöitä, jotka mahdollistavat makron suorittamisen aina, kun solu muuttuu.

Oletetaan, että milloin tahansa yli 100 arvo syötetään sarakkeeseen A, haluat muotoilla sen vieressä olevan solun punaiseksi.

  • Avaa Visual Basic Edit (Työkalut> Makro> Visual Basic Editor)
  • Napsauta vasemmassa ikkunassa hiiren kakkospainikkeella Taulukko1 ja valitse Näytä koodi.
  • Kirja1 - Taulukko1-koodi-valintaikkunan yläosassa on kaksi avattavaa valikkoa. Valitse vasemmasta avattavasta valikosta Laskentataulukko. Valitse oikeasta avattavasta valikosta Muuta.
  • Kirjoita seuraavat koodirivit:

    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

Aina kun solun arvoa muutetaan, tämä makro suoritetaan. Muuttuja Target kertoo, mikä solu ja solun uusi arvo. Yllättäen tämän menetelmän käyttö ei hidasta merkittävästi prosessia.

Huomaa, että makro pysyy aktiivisena niin kauan kuin laskentataulukko on auki tai kunnes suoritat makron, jossa on seuraava rivi:

Application.EnableEvents = False

/ p> Excel 95 / 7.0: Sinun on käytettävä OnEntry-menetelmää. Määrität makron, jonka haluat suorittaa, kun arvo on syötetty. Tässä tapauksessa muuttuja Application.Caller sisältää muutetun osoitteen ja arvon. Syötä seuraava uuteen moduuliin:

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-tarkistus pysyy aktiivisena, kunnes suoritat makron seuraavalla koodilla:

Worksheets("Sheet1").OnEntry = False

Mielenkiintoisia artikkeleita...