|
Microsoft Office Excel |
|
|
Shift se ne može sprečitiNivo:
Ne znam koliko puta sam naglasio posebnu važnost jezika Visual Basic for Applications (VBA) u Excelu. Osim prostih snimljenih makroa koji olakšavaju rutinske postupke na radnom listu, uz pomoć VBA ćete lako pripremiti neki složeni zahvat ili napisati funkciju koja vam nedostaje. Nisu retki slučajevi da cele funkcionalne aplikacije budu napisane u Excelu i kao takve dobro zadovoljavaju potrebe korisnika. Ako ste i sami autor nekog rešenja u Excelu, tada je skoro sigurno da koristite i neke automatske procedure kojima postavljate početna i konačna stanja tako da se izvrše u času otvaranja ili zatvaranja radne sveske. Međutim, ovde leži jedan potencijalni problem: mnogi korisnici već znaju da držanjem pritisnutog tastera Shift pri otvaranju radne sveske mogu da zaobiđu izvršenje automatskog makroa. Ta mogućnost vas možda frustrira, jer bi mogla dovesti do narušavanja integriteta vaše aplikacije. Nemojte pokušavati da nađete način da sprečite ovu pojavu (za razliku od Accessa, gde je takva tehnika moguća). Jednostavno, Excel je tako dizajniran, a razlog je bezbednosne prirode. Naime, mnogi korisnici koji često upotrebljavaju makroe, a žele da imaju kakvu-takvu direktnu zaštitu, koriste podešavanje srednjeg nivoa sigurnosti (Tools / Macro / Security, odnosno Alatke / Makro / Bezbednost). U takvom okruženju, korisnik dobija obaveštenje o prisustvu makroa u radnoj svesci; ako su sadržaj i dejstvo makroa u tom času nepoznati, korisnik može da spreči njihov rad, ali i da ga dozvoli, preventivno držeći taster Shift i potom pregledajući kodni sadržaj. Ako ove mogućnosti ne bi bilo, autori makro virusa bi imali korak prednosti, a to bi bilo loše. S druge strane, sprečavanje rada makroa u otvorenoj radnoj svesci automatski znači i da vaša Excel aplikacija ne radi, a to je takođe nepoželjno. Nije baš sve tako crno, ukoliko ste spremni na malu igru mačke i miša sa "inventivnim" korisnicima. Scenario koji vam predlažem nije savršen, ali je veoma jednostavan: ako već ne možete da sprečite metode izbegavanja rada makroa, obezbedite da radna sveska ne služi praktično ničemu ukoliko se spreči njihovo dejstvo. Da biste to izveli, potrebno je da izvedete dva koraka. Najpre dodajte jedan radni list na početak radne sveske, a na njemu postavite samo neki tekst sa prikladnim uputstvom za korisnika koji je uspeo da otvori radnu svesku bez aktivnog VBA. Zatim na početak makroa Auto_Open dodajte sledeći kod: Sub Auto_Open() ' otvaranje radne sveske Application.ScreenUpdating = False For i = 2 To Sheets.Count Set List = Sheets(i) List.Visible = True Next Sheets(1).Visible = xlVeryHidden Sheets(2).Activate ' ovde sledi vaš početni kod aplikacije ' ... Application.ScreenUpdating = True End Sub Isti, zapravo recipročni postupak izvedite i na kraju makroa Auto_Close. Sub Auto_Close() ' zatvaranje radne sveske Application.ScreenUpdating = False ' ovde sledi vaš završni kod aplikacije ' ... Sheets(1).Visible = True Sheets(1).Activate For i = 2 To Sheets.Count Set List = Sheets(i) List.Visible = xlVeryHidden Next Application.ScreenUpdating = True End Sub Ključ rešenja je u sakrivanju radnog lista klauzulom xlVeryHidden, što je način koji se može opozvati isključivo posredstvom odgovarajuće VBA komande, a nikako iz interfejsa. Pri zatvaranju, biće sakriveni svi radni listovi sem prvog, a pri otvaranju će se desiti obrnuto - radni listovi će biti otkriveni, dok će prvi list sa uputstvom biti sakriven. Rekoh da način nije savršen: korisnik može držati pritisnut taster Shift i pri zatvaranju radne sveske, sprečavajući da se radni listovi sakriju. Ali, možemo pretpostaviti da je verovatnoća ovakvog poteza korisnika mnogo manja pri zatvaranju, nego u času otvaranja. Uostalom, ako isporučite Excel aplikaciju na kojoj je sakrvanje već izvedeno, korisniku ne preostaje ništa drugo, nego da nastavi ciklus sakrivanja i otkrivanja u aplikaciji.
|
|
Vrh stranice Prethodna stranica Naslovna strana Mapa sajta Pretraga |
| AFORIZAM ZA DANAS | OVIH DANA SLUŠAMO... |
| Copyright © Praktikum na Webu, 2000-2011; Valinor Design; sva prava pridržana. |