Excel – Automatska reakcija na promene u ćelijama

Kao što sigurno znate, zahvaljujući referenciranju u Excel-u, svaka promena unutar referencirane ćelije odražava se i na tekuću ćeliju. Na primer, u ćeliji A1 Excel-ovog radnog lista imamo formulu sa referencama ćelija koje se nalaze na drugom listu, a čija se vrednost menja na nekoliko sekundi (npr. vrednost akcija na berzi). Pretpostavimo da želite da nakon izmene sadržaja ćelije A1, recimo prekopiramo sadržaj ove ćelije u ćeliju G2, istovremeno kao reakciju na promenu izvršite kopiranje bloka ćelija B2:G2 u blok A2:F2. Da li je moguće automatizovati ove dve operacije, i to u isto vreme?

Za ovu automatizaciju moraćemo da angažujemo jedan VBA makro. Zato pozovite editor programskog koda menijem „Tools> Macro> Visual Basic Editor“, i unesite sledeći programski kod u novi modul:


Public Flag as Integer
Sub Promena ()
Range("b2:g2").Cut Destination:
=Range("a2:f2")
Range("g2").Value
= Range("a1").Value
Flag = 0
End Sub

Potom, kliknite prečicu [Ctrl+R] da biste u VBA editoru videli Project Explorer, pa onda dvostruko kliknite na naziv radnog lista koji trenutno koristite, npr. Sheet. Sada ćete u vrhu prozora sa programskim kodom videti dve padajuće liste. Jedna ima naziv [General], a drugoj je naziv [Declarations]. Iz prve liste izaberite Worksheet, a iz druge Change, pa ćete u editoru videti sledeće:


Private Sub Worksheet_Change(ByVal Target As Range)

End Sub

Između dve linije unesite sledeće:


If Flag = 0 And Target.Cells(1, 1)
= Range("a1") Then
Flag = 1
Promena
End If

Kad god se unutar ćelije A1 desi promena (change), procedura Worksheet_Change poziva proceduru [Promena], a ova procedura iseca (cut), kopira i prebacuje (paste) vrednost u odgovarajuća polja. Varijabla Flag, koja egzistira u obema procedurama, obezbeđuje da se cela operacija izvrši samo jedanput, tokom jedne izmene unutar ćelije A1. Bez ovoga Excel bi, zahvaljujući premeštanju vrednosti, beskonačno ponavljao proceduru [Promena].

Pratite Krstaricu na www.krstarica.com