|
Microsoft Office Excel |
|
|
Potpuna kontrola kretanjaNivo:
Prilikom izrade aplikacije u Excelu, poželjno je da mislite i na najsitnije detalje, kako biste ostvarili potpunu kontrolu ponašanja strukture. Ukoliko automatizujete procedure u Excelu, verovatno ste bili u prilici da naložite VBA makrou da prelazi na neke druge ćelije da bi upisao vrednosti. U takvim slučajevima, najčešće se isključuje osvežavanje ekrana (metoda Application.ScreenUpdating = False) da ne bi dolazilo do neprijatnog bljeskanja, a pri kraju makroa se aktivira neka unapred poznata ćelija i korisnik nastavlja sa radom. Međutim, to rezervisano mesto ne mora nužno da bude i najbolji izbor nakon izvršenja makroa, jer je možda udaljeno od pozicije u trenutku poziva makroa. Zato ne bi bilo loše uvesti blok naredbi kojima se početno mesto pamti, a na kraju i restaurira. U listingu je dat par prostih procedura koje obavljaju ovaj posao. Sve što treba da učinite u redovnoj primeni je da na početku neke složene radne procedure napišete Call Zapamti, a na kraju Call VratiSe. Obratite pažnju da se pozicija čuva u globalnim promenljivama na nivou modula, pa obe procedure morate napisati u istom listu modula.
Dim red As Integer, kolona As Integer, list As String Primer sličan prethodnom se ogleda u ograničavanju kretanja kursora po aktivnim ćelijama radnog lista, tako da se posredno ograniči prostor za unos bez zaključavanja ćelija. Pre nekog vremena, kolega Branko Jakovljević je tražio način da promeni ponašanje Excela pri unosu podataka u tabelu, tako da se nakon unosa poslednjeg podatka u koloni automatski dođe na prvo polje sledeće kolone. Ovako nešto se izvodi lakše nego što se u prvi mah čini. Tehnika koju ću vam ovde opisati je široko primenljiva i samo vam ostaje da napravite varijaciju po sopstvenoj potrebi. Namerno nisam napravio univerzalno rešenje, već prosti studijski primer, u nadi da će to početnici u VBA lakše razumeti. Recimo da se tabela za unos nalazi na poziciji A3:F10. Kada se pritisne Enter, po defaultu, aktivira se ćelija ispod unete. Krećemo od ćelije A3; kada se popuni A10, treba da se aktivira B3 i tako redom. Otvaramo VBE (Alt+F11) i potom u prozoru Project duplim klikom na Sheet1 (tj. na list na kome je ova tabela) otvaramo prozor modula radnog lista. U padajućim listama prozora modula biramo Worksheet (leva lista) i metodu Change (desna lista). Formiraće se zaglavlje makroa Worksheet_Change. Treba uneti sledeće:
Private Sub Worksheet_Change(ByVal Target As Excel.Range) Uslov IF traži da se događaj inicira ako je nakon unosa aktivna ćelija u 11. redu i da je kolona manja od F (nakon poslednjeg unosa, recimo, kontola više nije bitna). I - to je sve! Napravimo i varijaciju: recimo da se podaci unose vodoravno, pritiskom na Tab ili drugačije podešenim tasterom Enter (Tools/Options/Edit, stavka Move selection after Enter lista Direction). Makro će izgledati ovako:
Private Sub Worksheet_Change(ByVal Target As Excel.Range) Postoji mnoštvo sličnih tehnika i, po pravilu, sve su jednostavne. Ključ je samo u pronalaženju odgovarajućeg objekta i njegovih metoda; najbolji način, stalno ponavljam, jeste da se igrate. Obratite pažnju da se makroi koji programiraju događaje na radnom listu uvek unose na listu modula koji pripada tom radnom listu, a ne u novom, nezavisnom listu modula.
|
|
Vrh stranice Prethodna stranica Naslovna strana Mapa sajta Pretraga |
| AFORIZAM ZA DANAS | OVIH DANA SLUŠAMO... |
| Copyright © Praktikum na Webu, 2000-2010; Valinor Design; sva prava pridržana. |