|
Visual Basic for Applications |
|
|
Sakrivanje makroaNivo:
Ako koristite VBA makroe, verovatno ste se navikli na klasični dijalog za pokretanje makroa koji dobijate prečicom Alt+F8. No, s obzirom na to da mnogi programeri vole da programiraju modularno, lako može da se desi da okno sa spiskom makroa postane zagušeno, pa tada u prvi čas ne znate koji makro da odaberete za pokretanje. Ova pojava je naročito izražena u Wordu, gde glavni predložak Normal.DOT predstavlja uobičajeno mesto za čuvanje svih makroa; vremenom kolekcija naraste, možda i preko svake mere, pa onda nije baš lako odabrati pravi makro. No, zadržimo se na čas na posmatranju problema iz ugla autora VBA rešenja: ako imate čestu praksu da programirate u Officeu na ovaj način, bilo bi dobro da saznate kako da olakšate izbor makroa svojim korisnicima. Za početak, obratite pažnju da neće uvek svi makroi biti izlistani u oknu dijaloga Macros, što se dešava u tri slučaja. Prvi slučaj su funkcije: s obzirom na to da funkcija uvek vraća neki parametar, dijalog ne može da upravlja takvim postupkom izvršenja, pa ne izlistava funkciju. Drugi oblik je sličan: to je procedura (deklaracija Sub) koja sadrži parametre; pošto ne možete obezbediti parametre u dijalogu, njihov prikaz u spisku nema smisla, jer takav poziv je logičan samo iz drugog makroa. Treći način je eksplicitni i koristićete ga kada želite da sakrijete makro sa spiska: deklarišite ga kao privatnu proceduru; kada programirate modularno, gde postoji glavni makro koji samo proziva druge procedure u modulu, poštujte takav pristup. ' javna procedura se vidi u spisku Sub VidljivaProcedura() MsgBox "Ovaj makro se vidi u spisku" End Sub ' privatna procedura se ne vidi Private Sub PrivatnaProcedura() MsgBox "Private Sub se vidi u spisku" End Sub ' procedura sa argumentom se ne vidi ' ovaj argument je inače beskoristan Sub ArgProcedura(Optional nista As Integer) MsgBox "Sub sa argumentom se ne vidi u spisku" End Sub ' funkcija se ne vidi u spisku Function ProcFunkcija() As Boolean MsgBox "Funkcija se ne vidi u spisku" End Function Pogledajte primere u priloženom listingu: možete ih preneti u bilo koji Office program, pa ispitati njihovo ponašanje. Da ne bi bilo nejasnoća, valja da obratite pažnju na nekoliko posebnosti tri varijante sakrivanja makroa sa spiska. Najpre upozorenje koje se tiče deklaracije Private Sub: setite se da osnovna svrha ovakvog deklarisanja jeste u tome da se ograniči domet dejstva prilikom poziva. Gledano iz ugla programskog koda, privatna procedura je vidljiva samo unutar istog modula. Drugim rečima, ako koristite privatnu proceduru za potrebe optimizacije kôda, pripazite na to da ona više neće biti vidljiva iz drugih modula. Štaviše, mogli biste u svakom modulu da imate različite privatne procedure istog imena; ali, nemojte to da činite da ne biste napravili zbrku (dodajte neki prefiks na ime u takvom slučaju). To je i razlog zašto vas upućujem na varijantu procedure sa "lažnim argumentom", čiji primer vidite kao makro ArgProcedura. Argument po imenu nista je beskoristan sa stanovišta operativnosti, nego služi baš sakrivanju sa spiska makroa; a ako je već koristan kao deo neke veće radne procedure, upotrebite klauzulu Optional da biste se lišili obaveze da navodite i argument procedure prilikom poziva sa drugog mesta u kodu. I konačno, neka vas ne iznenadi potpuno atipična upotreba funkcije ProcFunkcija u datom listingu: uobičajeno je da funkcija formira i vraća neku vrednost, što ovde nije slučaj. Iako je neobično, takva upotreba funkcije je sasvim legitimna. Klauzula vrednosti Boolean u ovakvom obliku uvek vraća vrednost False (numerički, to je nula), ali čak i to je nebitno, jer svakako nećete ispitivati tu vrednost. Varijante sa namernim sakrivanjem makro procedura obezbeđuju vrlo dobar trik kojim možete podržati svoje aplikativno rešenje u nekom Office programu. Naime, ako dodeljujete makroe dugmadima koje postavljate na površinu dokumenta, verovatno znate da željeni makro nakon crtanja dugmeta povezujete izborom u dijalogu Macros koji se generički otvara kada nacrtate dugme. Ako bi to bio makro deklarisan kao Private Sub, ne biste ga videli u spisku. Međutim, nakon što povežete makro sa dugmetom, slobodno se vratite u VBE, pa deklaraciju Sub promenite u Private Sub i dugme će ostati aktivno, ali će makro ostati prikriven.
|
|
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. |