You are on page 1of 257

Tartalomjegyzk

0. fejezet: A szerz elszava ___________________________________________ 7 A makrrs eszkzei________________________________________________ 7 Visual Basic for Application________________________________________ 8 Mit programozunk?______________________________________________ 8 Ne adjuk fel!___________________________________________________ 8 A knyv felptse _________________________________________________ 8 1. rsz: Alapfogalmak _____________________________________________ 9 2. rsz: Visual Basic for Application __________________________________ 9 3. rsz: Az Excel objektumai _______________________________________ 10 4. rsz: Kapcsolat a felhasznlval ___________________________________ 11

Alapfogalmak
1. fejezet: A programozsrl ___________________________________________ 15 Mi a programozs? ________________________________________________ 15 Programozs a szmtgpen_______________________________________ 16 Programozsi technikk ____________________________________________ 20 Struktrlt programozs__________________________________________ 21 Modulris programozs__________________________________________ 22 Az objektumok jellemzi __________________________________________ 24 Objektumok keletkezse __________________________________________ 25 sszefoglals ____________________________________________________ 26 2. fejezet: Objektum-hivatkozsok ______________________________________ 27 Az objektumok viszonya_____________________________________________ 27 Gyjtemnyek _________________________________________________ 28 Hivatkozsi tvonal _____________________________________________ 30 Objektumdiagram _________________________________________________ 33 sszefoglals ____________________________________________________ 34

Tartalomjegyzk

Visual Basic for Application


3. fejezet: Visual Basic Editor__________________________________________ 39 Visual Basic Editor (VBE) __________________________________________ 39 Projekt ablak _________________________________________________ 40 Tulajdonsg ablak_______________________________________________ 43 Segdablakok _________________________________________________ 43 Eljrsok szerkesztse______________________________________________ 44 sszegezve _____________________________________________________ 46 4. fejezet: Vltozk meghatrozsa _____________________________________ 47 A Visual Basic adattpusai ___________________________________________ 47 Numerikus adattpusok___________________________________________ 47 String adattpus _______________________________________________ 48 Egyb adattpusok______________________________________________ 49 Adattpus meghatrozsa elnevezssel __________________________________ 50 Vltozk meghatrozsa _____________________________________________ 51 A vltozk neve ________________________________________________ 51 A deklarls _____________________________________________________ 52 Implicit deklarci ______________________________________________ 52 Explicit deklarls ______________________________________________ 53 Tmbk deklarlsa _____________________________________________ 54 Dinamikus tmbk ______________________________________________ 56 sszefoglalva ____________________________________________________ 57 5. fejezet: Specilis vltozk___________________________________________ 59 Objektumok elnevezse _____________________________________________ 59 Tmbk helyett gyjtemnyek ______________________________________ 61 Objektum-elforduls ltrehozsa ___________________________________ 61 A gyjtemny bvtse ___________________________________________ 62 Elem eltvoltsa _______________________________________________ 63 rtk megvltoztatsa ___________________________________________ 64 Felhasznli adattpus hasznlata______________________________________ 64 sszefoglals ____________________________________________________ 66 6. fejezet: llandk, felsorolsok _______________________________________ 67 llandk deklarlsa _______________________________________________ 67 Felsorolsok ____________________________________________________ 68 A felsorolsok hasznlata ___________________________________________ 70 sszefoglals ____________________________________________________ 71 7. fejezet: Hatkr, lettartam _________________________________________ 73 Eljrs szint vltozk______________________________________________ 73 Paramteres eljrs, szubrutin _____________________________________ 74 2

Tartalomjegyzk Opcionlis paramterek __________________________________________ 76 Tmbparamter deklarlsa ________________________________________ 77 Modul szint vltozk s llandk_____________________________________ 80 Projekt szint vltozk s llandk _____________________________________ 81 A modulok klnbsge ___________________________________________ 81 Statikus vltozk__________________________________________________ 83 Tegynk rendet! __________________________________________________ 84 8. fejezet: Az adatok hasznlata ________________________________________ 85 rtkads _______________________________________________________ 85 Opertorok _____________________________________________________ 87 Aritmetikai opertorok ___________________________________________ 87 A mveletvgzs sorrendje ________________________________________ 88 Szvegkezel opertorok _________________________________________ 89 sszehasonlt opertorok _______________________________________ 92 Logikai opertorok _____________________________________________ 93 sszefoglals ____________________________________________________ 94 9. fejezet: Programvezrl utastsok ___________________________________ 95 Elgazsok (szelekcik) _____________________________________________ 95 If... Then... Else elgazs _________________________________________ 95 Select Case szelekci ____________________________________________ 99 Ciklusok (itercik) ______________________________________________ 103 For.... Next iterci ___________________________________________ 103 For Each... Next gyjtemny iterci__________________________________ 108 Do... Loop iterci ____________________________________________ 110 sszefoglals ____________________________________________________ 113 10. fejezet: Visual Basic eljrsok ______________________________________ 115 Az eljrsok _____________________________________________________ 115 Szubrutinok __________________________________________________ 116 Fggvnyek___________________________________________________ 116 11. fejezet: A programok finomtsa _____________________________________ 119 A program vgrehajtsa lpsenknt ___________________________________ 119 Trspont elhelyezse _____________________________________________ 122 Vltozk figyelse ________________________________________________ 123 Kifejezsek figyelse, feltteles megszakts ____________________________124 Helyi vltozk megfigyelse__________________________________________ 125 A prba ablak hasznlata ___________________________________________ 127 sszegezve _____________________________________________________ 128

Tartalomjegyzk

Az Excel objektumai
13. fejezet: Ismerkeds a tulajdonsgokkal ________________________________131 Excel objektumok_________________________________________________ 132 Az Excel mint objektum __________________________________________ 132 Munkafzet gyjtemny s objektumok _______________________________136 Munkalapok gyjtemny s objektumok _______________________________139 Ablakok gyjtemny, ablak objektum_________________________________142 Cellk s tartomnyok___________________________________________ 143 Rajz objektumok _______________________________________________ 151 Diagram objektumok ____________________________________________ 153 sszefoglals ____________________________________________________ 155 14. fejezet: Makr ksztse felvtellel ___________________________________ 157 Makr rgztse__________________________________________________ 157 A felvteli jellemzk meghatrozsa__________________________________ 158 Finomtsuk a felvtelt ____________________________________________ 161 Adattartomny keretezse ___________________________________________ 163 Jelents kiegsztse _______________________________________________ 169 sszegezve______________________________________________________ 171 15. fejezet: Vezrls esemnyekkel _______________________________________ 173 Az objektumok esemnyei ___________________________________________ 173 Esemnyek alkalmazsa _____________________________________________ 176 Egyb esemnyek _________________________________________________ 178 Futsidej hibakezels ______________________________________________ 181

Kapcsolat a felhasznlval
16. fejezet: zenetek, prbeszd _______________________________________ 187 Egyszer zenetek ________________________________________________ 187 Office segd ____________________________________________________ 190 Prbeszdpanelek hasznlata ________________________________________ 199 Prbeszdpanel ltrehozsa_______________________________________ 199 Tovbbi vezrlsek _______________________________________________ 205 Beviteli mez ________________________________________________ 206 Kombinlt lista _______________________________________________ 207 Listapanel vezrls _____________________________________________ 212 sszefoglals ___________________________________________________ 216 17. fejezet: Mensor, eszkztr ________________________________________ 217 Egyedi men s eszkztr ___________________________________________ 217 Menk, eszkztrak programozsa ____________________________________ 222 Menpontok____________________________________________________ 225 4

Tartalomjegyzk Bvtmnyek ltrehozsa ___________________________________________ 230 A bvtmny elksztse ________________________________________ 230 Elkszts futsi idben ___________________________________________ 233 A fggvny jellemzk meghatrozsa ________________________________234 Billenty-kombincik programozsa ________________________________235 sszegezve _____________________________________________________ 236 18. fejezet: Kapcsolat ms programokkal_________________________________239 Az Office alkalmazsok hasznlata_____________________________________ 239 Kapcsolat ltrehozsa __________________________________________ 240 Objektum ltrehozsa __________________________________________ 242 Ltez dokumentum kezelse ______________________________________ 243 sszegezve _____________________________________________________ 252

A szerz elszava

z Excel el lve sok eszkzt kapunk, ami megknnyti a mindennapi munknkat. Mgis elfordulhat, hogy tallkozunk egy-egy olyan feladattal, amire a program nincs felksztve. Mskor meg nem pontosan gy trtnnek a dolgok, ahogy azt mi szeretnnk. Ez nem a program hibja! Nem is hiba. Egyszeren arrl van sz, hogy olyan feladattal tallkoztunk, amit elre nem lehetett ltni. Ilyenkor lehetsgnk van belenylni a programba s j szolgltatsokkal kiegszteni az amgy is szertegaz lehetsgeket. Mit kell megismernnk ahhoz, hogy a sajt feladatainkat automatizlhassuk? w Melyek a makrkszts eszkzei? w Mikor rjunk makrt? w Mi a makr?

A makrrs eszkzei
Ahhoz, hogy kibvthessk az Excel szolgltatsait, meg kell ismerkednnk a makrksztssel. A makrkszts kt alapvet eszkze a Visual Basic for Application programnyelv, a msik, ennl jval nagyobb terlet az Excel objektumok ismerete, hasznlata. Szerencsre, sem az objektumok, sem a Visual Basic nyelv nem vltozott jelentsen az Office 97-es kiads ta. Ha valaki megismerte a korbbi vltozatok lehetsgeit, pontosan ugyangy dolgozhat a 2003-asban, mint korbban. Vrhatlag mg sokig a Visual Basic 6.0-ssal egyez krnyezetben dolgozhatunk. Ezrt is nem az a knyv cme, hogy az Excel 2003-as programozsa. Elhanyagolhatan kevs vltozs csak az objektumoknl trtnt. A programozs nyelve teljesen megegyezik a korbbi kiadsokban tallhatval.

A szerz elszava

Visual Basic for Application


Az Office alkalmazsok programozst makrzsnak nevezzk. A programozs s a makrzs rokonrtelm szavak. Ms szval ugyanaz a jelentsk itt az Office krnyezetben. Ennek megfelelen, aki makrt r, az programozik. Az Office krnyezetben a programozs nyelve a Visual Basic for Application. Minden Office alkalmazs mgtt ezt a nyelvet talljuk, ahogy ez a nyelve a Visual Basic 6.0 fejleszt krnyezetnek is.

Mit programozunk?
Mirt kell akkor kln az Excel, a Word vagy a PowerPoint programozsrl beszlnnk. Ennek egyszer oka van! A Visual Basic csak keretet ad a programnak. A Visual Basic ismerete elengedhetetlen, de nem elgsges felttele a sikeres makr rsnak. Az eszkzk, amiket programozunk, az objektumok. Az alkalmazsok objektumai alkalmazsonknt eltrek, s nagyon sokflk. Egsz ms objektumok tallhatk a Word-ben, mint az Excel-ben. Ezt a sokflesget nem egyszer megismerni. Pldul az Excel objektumairl szl programozsi referencia knyv tbb mint 1000 oldal. Az objektumokat mi magunk is felfedezhetjk. Teht arra a krdsre, hogy mit programozunk, a helyes vlasz az, hogy az adott alkalmazs jelen esetben az Excel objektumait.

Ne adjuk fel!
Lesznek olyan olvask, akik ezt az elz kt gondolatot elolvasva leteszik a knyvet. Kr lenne ilyen hamar feladni! A knyv rsakor ugyanis azt feltteleztem, hogy sokan lesznek, akik korbban mg nem programoztak, s gy indulnak neki ennek az ismeretlen tnak. Elssorban nekik sznom ezt a knyvet. Teht rdemes egy kicsit tovbb lapozgatni benne. Akik mg soha nem programoztak, azoknak javaslom, hogy fejezetrl fejezetre haladva prbljanak ki minden lert pldt, olvassk el az alapfogalmakrl szl rszt. Bzom benne, hogy messzebb jutnak, mint gondolnk!

A knyv felptse
A knyvben rszekbe foglaltam az elsajttand ismereteket. Egy-egy rsz tbb fejezetbl ll. A rszek s a bennk olvashat fejezetek a kvetkez ismereteket fogjk ssze:

A knyv felptse

1. rsz: Alapfogalmak
Ebben a rszben a programozs alapet szemlleteirl lesz sz. Megismerkednk nhny programozsi technikval, eljutunk addig, hogy megrtsk az objektumok keletkezsnek az okt. Megtanuljuk, mit kell tennnk ahhoz, hogy az objektumokat programozhassuk. 1. fejezet: A programozsrl w Ennek a fejezetnek a clja, hogy kicsit betekintst nyerjnk a programozsi technikkba. Megrtsk, hogy mirt nem mindegy, hogy milyen mdod runk meg egy programot, rltsunk legyen az objektumok mkdsre. 2. fejezet: Objektum-hivatkozsok w Az Office objektumok programozsa sorn lnyeges krds, hogy helyesen hivatkozzunk arra az objektumra, amit felhasznlunk a programunkban. Teht amikor programozunk, akkor nem kell kijellnnk a kiszemelt objektumot, elegend, ha hivatkozni tudunk r, de ezt pontosan kell megtennnk.

2. rsz: Visual Basic for Application


Ezt a rszt teljes egszben arra szntuk, hogy megismerjk a Visual Basic for Application keretrendszert. rdemes elsajttani ezeket az ismereteket, mert ezt felhasznlhatjuk a tbbi Office alklamazs programozsakor, ugyangy, mint a Visual Basic 6.0 fejleszt krnyezetben. 3. fejezet: Visual Basic Editor w Ez az a fellet, ahol programot rhatunk. Ezt az eszkzt hasznljuk makr rs kzben. Itt talljuk meg a munkafzethez tartoz programozsi eszkzket, modulokat, rlapokat. Ezt a felletet fogjuk megtallni az sszes Office alkalmazs mgtt. 4. fejezet: Vltozk meghatrozsa w A programozs legfbb clja az adatfeldolgozs. A feldolgozand adatokat meg kell riznnk, a program futsa kzben. Erre vallk a vltozk. A vltoz nem ms, mint az operatv memria egy meghatrozott terlete, amit egy nvvel lttunk el. Azt a terletet amit megneveztnk vltoznak nevezzk. 5. fejezet: Specilis vltozk w Lesznek olyan vltozk, amelyekket kicsit msknt kezelnk, mint az elz fejezetben megismerteket. Ezek knyelmesebb, rugalmasabb tehetik a programozst. 6. fejezet llandk, felsorolsok w Vannak olyan adatok, amelyek nem vltoznak meg a program futsa kzben. Ezeket llandkban troljuk. Az ellandk egy specilis tpusai a felsorolsok. 9

A szerz elszava 7. fejezet: Hatkr, lettartam w A vltozk tkzhetnek egymssal. Ugyanabban a krnyezetben nem hasznlhatjuk ugyanazt a vltoznevet. A progamozsi egysgek hatrt szabnak a vltozk rvnyessgnek. Ezt nevezzk hatkrnek. Az lettartam segtsgvel azt hatrozhatjuk meg, hogy csak a program futsi ideje alatt trolja a vltoz a bele rt rtket, vagy mg akkor is rizze meg, amikr a program mr lefutott. Erre azrt lehet szksgnk, mert az jabb futtatskor a korbban trolt rtket szeretnnk tovbb felhasznlni. 8. fejezet: Az adatok hasznlata w A vltozk tartalmval klnfle mveleteket vgezhetnk. Az egyik legfontosabb mvelet, amikor elhelyezzk bennk a feldolgozand rtkeket. Ezt rtkadsnak nevezzk. A vltozkba rt rtkekkel mveleteket hajthatunk vgre. Ezt opertorok segtsgvel tesszk. Opertor pldul az sszeads, kivons mveleti jel. 9. fejezet: Programvezrl utastsok w Amikor a vltozk tartalmtl fggen eltr programrszeket szeretnnk vgrehajtani, akkor a programvezrl utastsokhoz kell fordulnunk. A programvezrl utastsokkal elgazhatunk a krnyezeti feltteleknek megfelelen, vagy megismtelhetjk a program egy rszlett, amg a felttelek ehhez megfelelek. 10. fejezet: Visual Basic eljrsok w A programjainkat eljrsokba fogjuk megrni. Tbbfle eljrst hasznlhatunk Visual Basic krnyezetben. Ezek kzl, mi ktflt trgyalunk, a Sub s a Function tpusokat. 11. fejezet: A program finomtsa w Mire ehhez a fejezethez rnk, mr ismerjk a vltozk hasznlatt, a programvezrl utastsokat. Lehet, hogy a progamunk nem pont gy fog mkdni, ahogy elkpzeltk. Ilyenkor nagy segtsg, ha meg tudjuk lltani az eljrst egy adott helyen, s megvizsglhatjuk a vltozk tartalmt, kielemezhetjk a program lpseit. Ehhez megvannak a megfelel eszkzk a Visual Basic krnyezetben.

3. rsz: Az Excel objektumai


Ez a msik komponenes, amit meg kell ismernnk ahhoz, hogy makr rsba fogjunk. Sajnos a knyv terjedelme nem teszi lehetv, hogy az objektumok teljes skljt megismerjk. ppen ezrt ebben a rszben nem is az objektumokra fogunk koncentrlni, hanem sokkal inkbb olyan mdszereket mutatunk be, amelyek segtsgvel nllan kzelebb kerlhetnk az objektumok hasznlathoz. 13. fejezet: Ismerkeds a tulajdonsgokkal w Az objektumok bels vltozit tulajdonsgnak nevezzk. Programozskor a tulajdonsgoknak rtket 10

A knyv felptse adunk, ettl az objektum megjelense, mkdse megvltozik. Ezt jl kihasznlhatjuk programksztskor. 14. fejezet: Makr ksztse felvtellel w Az Office alkalmazsok nagy rszben gy is kszthetnk makrt, hogy felvesszk mint egy magnval azokat a lpseket, amelyeket gyakran kell elvgeznnk. Ezekbl az Office alkalmazsok kis programokat, eljrsokat ksztenek. Ez egyrszrl azrt hasznos, mert ms rja meg helyettnk a programot, msrszrl pedig ha megnzzk az eredmnyt s kielemezzk, akkor sokat tanulhatunk belle az objektumokrl. Rviden szlva a makr rgzts egy tant. 15. fejezet: Vezrls esemnyekkel w Az objektumokban vannak olyan eljrsok, amelyek automatikusan lefutnak, ha trtnik valami az objektummal. Ezeket esemnyeknek nevezzk. Ilyen esemny lehet Excel krnyezetben pldul egy munkafzet megnyitsa, bezrsa, vagy egy cella tartalmnak a megvltoztatsa. Ezekbe az esemnyvezrelt eljrsokba berhatjuk a magunk utastsait, a szksges program lpseket. Ezzel az adott esemny bekvetkezsekor az fog trtnni, amit mi elgondoltunk.

4. rsz: Kapcsolat a felhasznlval


Itt mr a bentfentesek biztonsgval hasznljuk a programozs eszkzeit, elindtjuk az ltalunk rt programokat. Tudunk mr olyan eljrsokat, fggvnyeket kszteni, amit tbben is szeretnnek hasznlni. Ha csak lehet, gy kell tadnunk msoknak a programjainkat hogy ugyangy hasznlhassk azokat, mintha az Excel rszei lennnek. Ebben a rszben azokat az eszkzket ismerhetjk meg, amelyek lehetv teszik az ltalunk rt programok terjesztst. 16. fejezet: zenetek, prbeszd w A programokat rendszerint nem magunknak ksztjk. Vrhatan, akik hasznlni fogjk, nem tudnak programozni. A szmukra neknk kell biztostanunk a lehetsget arra, hogy a program futsa alatt k is befolysolhassk a program mkdst. Msknt fogalmazva a proram futsakor elfordulhat, hogy tartanunk kell a kapcsolatot a felhasznlval. Ebben a fejezetben azokat az eszkzket, objektumokat ismerhetjk meg, amelyek ezt lehetv teszik. 17. fejezet: Mensor, eszkztr w A felhasznl szereti azokat az eszkzket hasznlni, amelyek mr ismersek a szmra. Mivel minden program hasznl menparancsokat, eszkztrakat, a legegyszerbb ha ezeknek az eszkzknek a segtsgvel frhet hozz a felahasznl az ltalunk rt programokhoz. Egy msik szempont, hogy az eljrsainkbl csak a mkdst adjuk t. 11

A szerz elszava Nem lnyeges a szmra a megvalsts mdja. Ennek megfelelen annyira rejtsk el a mekrinkat, emnyyire csak lehet. Ehhez j lehetsg a bvtmny ksztse. Ezt is megismerhetjk ebbl a fejezetbl. 18. fejezet: Kapcsolat ms programokkal w Az Excelben ltrehozott eredmnyeinket nem egyszer Word tblzatban vagy PowerPoint prezentciban szeretnnk kzz tenni. Megtehetjk, ha megismerkednk azzal a mdszerrel, ahogy t lehet adni az adatot az egyik alkalmazsbl a msikba. Termszetesen ezt is automatizlhatjuk programrssal. Ha megismerjk az Excel programozst, jobban megrtjk azt is, hogy mi trtnik, amikor egy mveletet vgrehajtunk, kijellnk egy tartomnyt, vagy ppen egy fggvnyt hasznlunk. Teht egy kicsit jobban beleltunk az Excel-be. A programozsban jrtas olvasnak kicsit ms szemmel kell olvasni ezt a knyvet. Klnsen, ha mr dolgozott Visual Basic krnyezetben. Nekik az Excel objektumainak hasznlatt knnytheti meg ez a knyv. Sok pldval, feladattal juthatnak kzelebb az Excel-hez.

Sok sikert kvnok a tanulshoz!

Kovalcsik Gza

12

Alapfogalmak

1.rsz

Az 1. rsz tartalmbl
Ebben a rszben a programozs alapet szemlleteirl lesz sz. Megismerkednk nhny programozsi technikval, eljutunk adig, hogy megrtsk az objektumok keletkezsnek az okt. Megtanuljuk, mit kell tennnk ahhoz, hogy az objektumokat prograozhassuk.

1. fejezet

A programozsrl

ivel azt tztk ki clul, hogy programozni fogunk, ismerkedjnk meg nhny programozsi alapfogalommal. Rviden gondoljuk t, hogy mit is jelent a programozs, milyen eszkzk llnak rendelkezsnkre egy-egy program elksztsekor. Ismerkedjnk meg az Office szerzi ltal alkalmazott programozsi technikval. Fedezzk fel, hogyan lehet Windows krnyezetben programozni. Ebben a fejezetben a kvetkez krdsekre keressk a vlaszt. w w w w w w w Mi a programozs? Mik azok a vltozk? Mi az algoritmus? Hogyan programoznak ma? Mi az objektum? Melyek az objektumok jellemzi? Hol tallunk objektumokat?

Mi a programozs?
Ki az, aki mg soha nem programozott? Ha mst nem tettnk, csak elterveztk a szabadidnk eltltst, az mr programozs. Ha elterveztk, hogy mit, hogyan tesznk, tgondoltuk az esemnyek sorrendjt, helyt s figyelembe vettk a krlmnyeket, akkor programoztunk. Ezek szerint mindenki programozott? Valsznleg igen! Ezek szerint mindenki programoz? A maga mdjn igen! Teht, amikor elterveznk valamilyen esemnysort, akkor programozunk. Amikor a tervezett tennivalkat vgrehajtjuk, akkor futtatjuk a programot. Persze ezt gy a htkznapjainkban sosem fogalmazzuk meg. Most is csak azrt tettk, hogy kzelebb kerljnk a szmtgpes programozshoz.
A program
A program egy adott idben, adott helyen vgrehajtott esemnysor meghatrozsa, amely figyelembe veszi a krlmnyeket.

15

Alapfogalmak

1. rsz

Programozs a szmtgpen
A cl
A szmtgpes programozs clja az adatfeldolgozs automatizlsa.

A szmtgpes programozs clja az adatfeldolgozs. Adatokon vgznk mveleteket s adatokat kapunk eredmnyl. Az adatokat elrhetv kell tenni a program szmra. A program lpseit az adatokhoz kell igaztanunk. A feldolgozs lpseit algoritmusok rsval tervezzk meg. Vltozk w Ahhoz, hogy feldolgozhassuk az adatokat, biztostani kell a program szmra, hogy hozzfrjen. Erre a szmtgp operatv memrijt hasznljuk. A programnak tudnia kell arrl, hogy hol tallja az adatokat. Ezrt elnevezzk azokat a memriahelyeket, amit adattrolsra hasznlunk. A nvvel elltott memriarszt vltoznak nevezzk. A vltoz teht nem ms, mint az operatv tr egy adott terlete, amit nvvel ltunk el. A vltozkban klnbz rtkeket trolhatunk, kiolvashatjuk, megvltoztathatjuk a tartalmukat. A kvetkez kis pldban hrom vltoz szerepel. Az els sorban az A-nak nevezett memriaterletre 15-t runk be, a B-nek nevezett terletre 18-at. A vltozkban trolt rtkeket a harmadik lpsban sszeadjuk. Az eredmnyt egy harmadik vltozban troljuk. sszeadskor nem a tnyleges rtkeket hasznljuk fel, hanem a vltozk nevt, gy a vltozba rgztett rtkekkel vgznk mveletet.
A = 15 B = 18 C=A+B

Vltoz
A vltoz egy nvvel elltott operatv tr terlet, ahol a program futtatshoz szksges adatokat troljuk.

rtkads
A programban a vltoz neve mg egyenlsgjel utn rjuk be azt az rtket, amit trolni szeretnnk.

Vegyk szemgyre az utols parancssort! Ezt semmikppen nem gy kell rtelmeznnk, mint a matematika rkon tanult egyenleteket. A program vgrehajtsakor ugyanis az trtnik, hogy elbb az egyenlsgjel jobb oldalra rt mveletet hajtja vgre a program, majd az eredmnyt berja az egyenlsgjel bal oldaln ll vltozba. gy olyan mveleteket is lerhatunk, amit matematika rn hibsnak rtelmeztnk volna. Ha egy vltoz rtkt eggyel szeretnnk nvelni, akkor ezt a kvetkez mdon rjuk le:
I=I+1

Algoritmus
Az algoritmus azon lpsek sorozata, melyek lerjk egy feladat megoldst.

Ezt a sort gy rtelmezi a Visual Basic, hogy vgrehajtja az egyenlsgjel jobb oldali mvelett, vagyis az I vltozhoz hozzad egyet, majd az eredmnyt visszarja az I vltozba. Teht itt nem azt rtuk le, hogy I egyenl egy nmagnl eggyel nagyobb szmmal. Algoritmus w Amikor programot runk, rdemes a feladatot megtervezni. Hasznos egyszer szavakkal megfogalmazni azt, hogy milyen lpseket fogunk elvgezni. Ehhez nem kell ms, csak papr meg ceruza. Mg azt a

16

1. fejezet

A programozsrl

programnyelvet sem kell ismernnk, amiben majd megvalstjuk a programot. Egyelre csak azt kell tudnunk, hogy milyen adatokkal milyen mveleteket szeretnnk elvgezni. A tervet persze ksbb le kell rnunk a kivlasztott programnyelven, de akkor mr csak a kdolsra, a programnyelvre kell figyelnnk. Az algoritmuskszts nem valami titokzatos dolog! Brmilyen tevkenysgrl kszthetnk algoritmust. Akr arrl, hogy miknt kszl el az ebd, vagy arrl, hogy mit kell tennnk ahhoz, hogy reggelente bejussunk a munkahelynkre. Ezek egybknt j gyakorlatok a programozs megismershez. Ha egy ksz programot szeretnnk megrteni, akkor annak az algoritmust kell felfedeznnk, megfejtennk. Minden programnak van algoritmusa. Vannak nehezebben s knnyebben rthetk, de mindegyiknek van valamilyen algoritmusa. A f cl az ttekinthetsg, egy egysges szerkezet kialaktsa. Ez azrt fontos, hogy az esetleg szksges program bvtseket, mdostsokat knnyen elvgezhessk. De nzzk meg az algoritmus ltalnos szerkezett! Ne feledjk, hogy adatfeldolgozsrl van sz! Ez fontos! Egy program akkor j, ha tbbszr is felhasznlhatjuk klnbz adatok feldolgozsra. Ilyenkor nem tudjuk elre, hogy mik lesznek a feldolgozand rtkek. Akkor jutunk hozz, amikor a felhasznl elindtja a programot. Teht az els rszben be kell krni a feldolgozand adatokat a felhasznltl. Ha ezt nem tesszk, nincs mit feldolgozni. Az algoritmus kvetkez rszben tnylegesen elvgezzk a szksges adatfeldolgozst. Itt lltjuk el az eredmnyt. Vgl az eredmnyrl tjkoztatjuk a felhasznlt. Vagyis kirjuk az eredmnyt.

CD mellklet 01 Fejezet
Jacksom modszer.pdf

1. bra: ltalnos algoritmus szerkezet lpsei Ezt a szerkezetet kvetve, olyan programokat rhatunk, amit tbb v tvlatbl is knnyen megrthetnk. Esetleg ms programozk is ttekinthetnek tlik. Ez elfelttele annak, hogy brmikor utlag is megvltoztathassuk a programot. Elfordul, hogy egyszerbb adatfeldolgozs sorn sszevonjuk a beviteli rszt a feldolgozsi rsszel, vagy pp a feldolgozst s az eredmny kirst szerkesztjk egybe. gy egyszersthetjk a programunkat.

17

Alapfogalmak

1. rsz

Parancstpusok
Mieltt nekifognnk brmilyen algoritmus elksztsnek, beszljk meg, hogy milyen utaststpusokat hasznlunk egy programban. Ezeket tudatosan hasznlva jl ttekinthet programokat kszthetnk. Msrszt jabb szakkifejezseket rthetnk meg. Brmilyen programot megrhatunk hromfle utastssal. A hrom utaststpus: a szekvencia, a szelekci s az iterci. Ha csak ezt a hrom utaststpust hasznljuk, akkor egy nagy lpst tettnk a strukturlt programozs fel. Ez persze mg nem elegend, de mindenkppen szksges lps. Az utaststpusokat a vgrehajts sorrendjnek mdja alapjn csoportostjuk.
Szekvencia
Azokat a parancsokat, melyek hatsra sem elgazs, sem ismtls nem kvetkezik be, szekvencinak nevezzk.

Szekvencia w Ha olyan utastsokat runk a programba, amiket sorban egyms utn kell vgrehajtani, akkor szekvencilis utastsokat hasznlunk. Ezekben a parancsokban vgrehajtunk egy-egy programlpst, nem vesszk figyelembe a krnyezeti vltozk rtkt, csak elvgezzk a szksges mveleteket. Olyan ez, mint a kzlekedsben a ktelez haladsi irny. Nem trnk el a kijellt tvonaltl. Amikor pldul az elz kis programban adatot rtunk az A s B vltozba, akkor szekvencit alkalmaztunk. Ugyangy szekvencia volt az is, amikor kiszmtottuk a kt szm sszegt. Szelekci w A sz jelentse: vlaszts. Szelektlni annyit tesz, mint vlogatni, vlasztani. De vajon mit kell vlasztanunk egy programban? Utastsokat! A vlaszts minden esetben fgg valamitl. Ha j id van, valsznleg a szabadba megynk, mg rossz id esetn olyasmit tesznk, ami zrt helyen vgezhet. A tevkenysg kivlasztsa ebben az esetben az idjrstl fgg. Persze a programban nem az idjrs lesz a meghatroz. Itt a vltozk pillanatnyi rtktl fggen ms-ms parancsokat fogunk vgrehajtani. A szelekcit ms nven elgazsnak is nevezzk. Elgazunk a program sorai kztt egy vagy tbb vltoz pillanatnyi rtktl fggen. Iterci w Ms szval ismtls. Ez a mi esetnkben azt jelenti, hogy a program utastsainak egy rszt tbbszr ugyangy kell vgrehajtani, csak esetenknt ms adattal. Az adat teht minden ismtlskor ms, de a mveletek ugyanazok. Az iterci megrtshez ismerkedjnk meg a tmbvltozkkal. Mint azt mr megbeszltk, a programokat azrt rjuk, hogy klnbz adatokkal elvgezhessk ugyanazokat a mveleteket. Ezt megtehetjk gy is, hogy minden alkalommal megadjuk a feldolgozni kvnt adatokat. Ms esetben, a programban egyszerre szeretnnk feldolgozni tbb adatot. Gondoljunk csak arra, hogy egy fizetslistban a fizetsek rtkvel vgznk mveleteket. Ilyenkor indexelt vltozkat hasznlunk. Ezt tmbnek nevezzk.

Szelekci
A vltozk tartalmtl fggen a program klnbz utastsait hajtjuk vgre. A felttelek fggvnyben elgazst vgrehajt parancsok a szelekcik.

Iterci
A program meghatrozott sorait ismtl utastsokat itercinak nevezzk.

18

1. fejezet

A programozsrl
Tmbvltoz
Az azonos nev, de indexszel elltott vltozk, a tmbvltozk.

A tmbvltozk a vltoz nevvel s a nv mg rt indexszel azonosthatak. Az indexet zrjelek kz rjuk. Nzznk egy egyszer pldt. A vltoz neve legyen Fizetes, s troljunk nyolc klnbz fizets rtket. Ez a kvetkez mdon rhat le programban:
Fizetes(1) = 48930 Fizetes(2) = 87390 Fizetes(3) = 75145 Fizetes(4) = 93457 Fizetes(5) = 69340 Fizetes(6) = 48930 Fizetes(7) = 87390 Fizetes(8) = 75145

A vltoz neve mind a nyolc esetben ugyanaz. A klnbsg az indexekben van. Ha ezeket a fizetseket szeretnnk feldolgozni, mondjuk mindenki kap tz szzalk jutalmat, akkor a jutalom kiszmtst vgz programrszletet nyolcszor kellene lernunk. Ez feleslegesen nveln a program mrett, nehezebb tenn a program olvasst. Ilyen esetben hasznljuk az itercis parancsokat. Nzzk a programot egyelre iterci nlkl! Ez a kvetkez:
Jutalom(1) = Fizetes(1) * 0.1 Jutalom(2) = Fizetes(2) * 0.1 Jutalom(3) = Fizetes(3) * 0.1 Jutalom(4) = Fizetes(4) * 0.1 Jutalom(5) = Fizetes(5) * 0.1 Jutalom(6) = Fizetes(6) * 0.1 Jutalom(7) = Fizetes(7) * 0.1 Jutalom(8) = Fizetes(8) * 0.1

Ez bizony elg hossz lett! Ugyanezt ciklusszervezssel, sokkal kevesebb lpsben is megrhatjuk. Szervezznk egy ciklust, ami nyolcszor ismtli meg az adott parancsokat. Ez most csak egy egyszer szorzs, de programozskor lesznek sszetettebb feladatok is. Mg ne foglalkozzunk a Visual Basic parancsokkal, egyelre csak szvegesen rjuk le a ciklust. Ez a kvetkezkppen nz ki:
I=0 Ismteld nyolcszor a parancsokat I=I+1 Jutalom(I) = Fizetes(I) * 0,1 Ismtls vge

Elemezzk a programot!

19

Alapfogalmak

1. rsz

I=0

A program els sorban egy gynevezett ciklusszmllt hasznlunk. Ebben a sorban azt mondtuk meg, hogy indulskor nulla legyen az rtke.
Ismteld nyolcszor a parancsokat

Amint belpnk a ciklusba ez a msodik programsor , a Visual Basic megjegyzi, hogy a ciklus kezdse s vge kztti utastsokat nyolcszor kell megismtelnie.
I=I+1

Ebben a sorban megnveljk a ciklusszmll rtkt eggyel. Mivel indulskor nulla volt a tartalma, most egy lesz! Ez a parancssor minden vgrehajtskor eggyel nveli az I vltoz rtkt. Ezt a vltozt felhasznlhatjuk a tmbelemek azonostsra, hiszen minden ismtlskor eggyel megn az rtke. gy vgiglpkedhetnk a tmb minden elemn. Vagyis az sszes adatot feldolgozhatjuk. A ciklus vgre teht, minden Jutalom vltozban megtalljuk az egyes fizetsekhez tartoz rtket. Lm valban nem kellett hozz nyolc sor, hogy mind a nyolc fizetst feldolgozzuk. A ciklus kezdete s vge kztti rszt ciklustestnek vagy ciklustrzsnek nevezzk. A ciklus annyiszor ismtli meg a ciklustestbe rt parancsokat, ahnyszor azt meghatrozzuk. A ciklustestben tetszleges szm parancs lehet. rdemes felfigyelni a program rsmdjra is! A ciklustestbe rt parancsokat kicsit beljebb kezdtk, mint a tbbit. Ez nagy segtsg a programoznak a program olvassakor. Messzirl lthatja, hogy itt valami ms szerkezet van.

Programozsi technikk
Rviden tekintsk t a programozsi technikk fejldst. A programozshoz a kezdeti idkben kevesen rtettek! Programokra mgis szksg volt, gy aztn tbben bele is fogtak a munkba. A kulcssz ebben az idszakban az volt, hogy Csak egyszer mkdjn!. gy is volt! Egyre msra kszltek azok a programok, amelyek vgre-valahra elindultak. A problma akkor kezddtt, amikor valamit vltoztatni kellett a programon. Ehhez meg kellett rteni a program algoritmust. Ha nem volt a keznkben az algoritmus, a programot meg kellett fejteni. Ez nha mg a program rjnak is nehzsget okozott!

20

1. fejezet

A programozsrl

Akkoriban tbb olyan programnyelv volt, amelyben az utastssorokat meg kellett szmozni (Basic, Focal ...). A parancssorok szmozsa korltozta a programok bvthetsgt. Amikor ugyanis szerettnk volna jabb sorokat berni valahova a program belsejbe, ott ehhez nem volt elg szabad sor. Sebaj, kiugrottunk a program vgre s megrtuk a hinyz rszletet. Aztn visszaugrottunk, hogy folytassuk a programot. Az ilyen ki-beugrlstl teljesen ttekinthetetlenn vlt a program. Termszetesen ez a szmtgpnek nem okozott semmi nehzsget, de a programozknak igen. Szinte lehetetlenn tette a programok utlagos mdostst, fejlesztst. Ez tette szksgess a programozsi technolgia megjtst.

Struktrlt programozs
Rendet kellett teht tenni a programrs krl. A legfontosabb cl az volt, hogy ttekinthet, jl olvashat, bvthet programok kszljenek. Megfogalmaztk azokat a feltteleket, programozsi technolgit, amitl a programok strukturltak lettek. Egy jl strukturlt programot minden hozzrt el tudott olvasni, s akr msik programoz ltal rt programokat is tovbbfejleszthettnk, mdosthattunk. Olyan program, amit ne lehetne, ne kellene tovbbfejleszteni, nincs! Mindezek szellemben bevezettk a strukturlt programozst. Elsknt az ugrs parancsot szmztk a programrs eszkzei kzl. A tovbbi programokban csak szekvencik, szelekcik s itercik szerepelhettek. Ezzel prbltk megszntetni a kuszasgot. Ez termszetesen csak egy lehetsg volt a strukturlt programok rshoz. Ha nem tartottuk be a szablyokat tovbbra is rhattunk ssze-vissza programokat. Eljrsok w A msik fontos lps a programok sztbontsa volt. A tl hossz programok ttekinthetetlenek, mg akkor is, ha rendezettek. Olyanok, mint egy krmondat, ami elindul valahova, de olyan hossz, hogy mire a vgre jutunk, nem tudjuk mirl szlt az eleje. Az ttekinthetsg rdekben kisebb egysgekre bontottk a programokat. Egy-egy kisebb, jl meghatrozhat rszfeladatot, programrszletet kln eljrsban rtak meg. Az eljrsoknak nevet adtak, s ettl kezdve az eljrsokat gy hasznlhattk, mint a program bels parancsait. Tbbnyire mi is ezt a technikt fogjuk hasznlni. Egyelre mg a nyelv ismerete nlkl nzznk egy pldt. Visual Basic nyelvben az eljrsokat a Sub kulcsszval kezdjk s End Sub parancssorral fejezzk be. A Sub kulcssz mg az eljrs nevt rjuk. Ezzel a nvvel hivatkozhatunk az eljrsra. gy j parancsot hozhatunk ltre. Egy-egy eljrsban egy-egy jl meghatrozhat, elklnthet programrszletet runk meg. A megrt eljrsokat felhasznlva sszelltjuk a teljes
Eljrs
Az eljrs egy jl meghatrozott nll programrsz. Az eljrsok nevt, mint j utastsokat hasznlhatjuk a program tbbi rszben.

21

Alapfogalmak

1. rsz

programot. Kisebb programokat termszetesen nem bontunk rszekre. Ezeket egyetlen eljrsban fogunk megrni, s a megrt eljrst futtatjuk.
Sub Adatgyujtes() utasts utasts End Sub Sub Feldolgozas() utasts utasts End Sub Sub Eredmeny() utastas utasts End Sub Sub Foprogram() Adatgyujtes Feldolgozas Eredmeny End Sub

Termszetesen a fejlds itt sem llt meg. A strukturlt programozsnak is voltak hinyossgai. Idvel egyre nagyobb programok kszltek. Ezeket mr nem tudta egy programoz elkszteni. Ha tbb programoz dolgozik ugyanazon a feladaton, szinte elkerlhetetlen, hogy a hasonl feladat miatt ne hasznljk ugyanazokat a vltozneveket. gy nem lehetett tudni, hogy melyik programrszlet nylt hozz egy vltozhoz. Nem lehetett tudni, hogy abban mg a mi ltalunk rt rtk van, vagy egy msik eljrs trta azt. Ezt gy prbltk elkerlni, hogy a lehetsgekhez kpest csak az eljrsokon bell hasznljanak vltozkat. gy is elfordult, hogy az adatok tadsa miatt szksg volt gynevezett publikus a program minden rszbl elrhet vltozkra.

Modulris programozs
A programozk jabb utat keresve, eljutottak a modul rendszer programozshoz. A modul egy zrt egysg, amely egy feladat megoldshoz tar-

22

1. fejezet

A programozsrl

toz sszes eljrst s vltozt magban foglal. A modulba rt program teljesen nll. A modul egy zrt programegysg. A modul felels a benne trtntekrt. Ebbl az elgondolsbl alakult ki a modulris programozs. Egy jl megrt modult tbbszr fel lehet hasznlni. Mg azzal sem kell trdnnk, hogy mi trtnik benne. A lnyeg, hogy rbzhatunk bizonyos feladatokat, amiket a modul nllan megold. Interfsz w Fontos felttele volt a modulris programozsnak, hogy a modulok zrtak legyenek, a modulba rt eljrsokhoz s vltozkhoz illetktelen programok ne frjenek hozz. Ezt gy valstjk meg, hogy a modulba rt eljrst s vltozt a modul magba zrja. Van nhny eljrs, amit a modul magba zr. Ez persze gy nem j. A modulba megrt eljrsokhoz hozz kell frni kvlrl is. Ehhez meg kell mondanunk, hogy melyik modul, melyik eljrst szeretnnk hasznlni. Ugyangy a modulban meghatrozott vltozknak is adhatunk rtket, ha megmondjuk, melyik modul, melyik vltozjrl van sz. Amikor azt rjuk le, hogy egy adott modul adott eljrst kvnjuk futtatni, akkor a modul interfszrl beszlnk. Ugyangy interfszen keresztl frhetnk hozz a modulba zrt vltozkhoz is. Ha pldul van egy Dolgozo modulunk, amiben meghatroztuk a Fizetes s Jutalom bels vltozkat, akkor ennek a kvetkez mdon adunk rtket:
Dolgozo.Fizetes = 97830 Dolgozo.Jutalom = Dolgozo.Fizetes * 0,1
Interfsz
Az modulban meghatrozott vltozkra s eljrsokra csak az modul nevvel egytt hivatkozhatunk. Ezt a hivatkozst nevezzk modul interfsznek.

Ha csak annyit rnnk le, hogy:


Fizetes = 97830 Jutalom = Fizetes * 0,1

akkor a program nem a Dolgozo modulon bell tallhat Fizetes s Jutalom vltozba rn be a megfelel rtkeket, hanem egy a Dolgozo modultl fggetlen msik vltozba. Persze, ha van egyltaln ilyen. A modulok eljrsait is hasonl mdon hasznlhatjuk. Ha a dolgoz modulban van Belepes s Kilepes eljrs, akkor ezt a kvetkezkppen futtathatjuk le:
Dolgozo.Belepes Dolgozo.Kilepes

Termszetesen ebben az esetben a Dolgozo modulnak jl kell mkdnie s minden be- vagy kilpssel kapcsolatos feladatot pontosan el kell vgeznie.

23

Alapfogalmak

1. rsz

Ez a technika lehetv tette, hogy msok ltal megrt modulokat ptsnk be a programjainkba. Ez hatkonyabb, ttekinthetbb s nem utolssorban gyorsabb tette a programozst. Ma sincs ez msknt. A programozk modulokbl ptkeznek. Ezek a modulok az objektumok. Az egyes modulokat tbbszr fel lehetett hasznlni. Ha olyan feladatot kellett elvgezni, amit egy modul meg tudott oldani, nem kellett jra megrni. Minden modulra olyan munkt bztak, amihez rtett az adott modul. Amikor egy Windows opercis rendszer el lelnk dolgozni, objektumokkal dolgozunk. Objektumok az ablakok, az alkalmazsok, a dokumentumok, s minden, de minden, amivel a szmtgpen tallkozunk. Makr rsa sorn az Excel objektumait fogjuk hasznlni. Ezrt fontos, hogy megismerkedjnk az objektum fogalmval.

Az objektumok jellemzi
Az objektumok jellemzit meg kell ismernnk. Nem fogunk j objektumokat ltrehozni, de hasznlni fogjuk az Excel-ben megrt objektumokat. rtket fogunk adni az objektumokban meghatrozott vltozknak, hasznlni fogjuk a bels vltozkat.

Kpzeljk el az objektumot!
Ha szeretnnk elkpzelni egy objektumot, leginkbb egy olyan trgynak kell elgondolnunk, amelyik kpes elvgezni bizonyos mveleteket s bizonyos tulajdonsgait brmikor megvltoztathatjuk. Milyen rdekes lenne pldul egy olyan aut, aminek a sznt brmikor egyetlen paranccsal megvltoztathatnnk. Ms fantasztikus dolgot is elgondolhatunk! Pldul azt, hogy csak bemondunk egy cmet, s az autnk odavisz minket. Persze gy teljesen elveszthetnnk az irnytst a dolgok felett. Biztostani kell egy-egy olyan pillanatot is, amikor mi mondhatjuk meg azt, hogy mi trtnjen. Mgis, az objektumok valahogy ilyen varzslatos trgyakknt mkdnek. Ehhez a programoznak ltre kell hoznia a megvltoztathat tulajdonsgokat, a metdusokat s az objektum esemnyeit.
Tulajdonsgok
Az objektumok bels vltozit tulajdonsgoknak nevezzk.

Tulajdonsgok w Az objektumok bels vltozit tulajdonsgoknak nevezzk. Mivel ezek bels vltozk, az interfszeken keresztl rtket adhatunk nekik, megvltoztathatjuk az rtkket vagy brmikor kiolvashatjuk ket. Minden objektum felels azrt, hogy a rbzott rtkeket tulajdonsgokat megrizze. gy, ha egy Excel munkafzet egyik munkalapjnak megvltoztatjuk a nevt, azt a munkalapnak meg kell riznie mindaddig, amg msik rtket, msik munkalapnevet nem adunk neki.

24

1. fejezet

A programozsrl
Metdusok
Az objektumok bels eljrsai a metdusok.

Metdusok w Az objektumban megrt eljrsok neve a metdus. A metdus teht egy egyszer programrszlet eljrs , amit az objektum magban hordoz. Hogy egy objektum milyen tulajdonsgokkal s milyen metdusokkal br, azt az objektumot elkszt programoz rta meg. A metdus az a cselekedet, amit egy objektum vgre tud hajtani. Ilyen pldul a dokumentum mentse. Esemnyek w A ksz objektumok elre meghatrozott mdon vgzik a dolgukat. Pedig milyen hasznos pldul ments eltt ellenrizni, hogy a felhasznl minden adatot bert-e a munkafzet megfelel celliba. Az objektum ri nem tudhatjk elre, hogy mi mit szeretnnk megvizsglni egy munkafzet mentse eltt. Akkor hogyan rhattk volna meg az ellenrzsre szolgl programrszletet? Sehogy! Ezt majd neknk kell megtennnk. Mindehhez meg kell teremteni a lehetsgeket. Az objektumok letben trtnnek bizonyos dolgok. Egy alkalmazs dokumentumt pldul kinyomtathatjuk, elmenthetjk, bezrhatjuk, megnyithatjuk. Ezek a dolgok esemnyek egy objektum letben. Ha meggondoljuk, pont akkor lenne j valami mdon beleszlni a trtntekbe, amikor ppen bekvetkezik egy-egy esemny. Az objektumorientlt programozs sorn tallkozunk majd olyan eljrsokkal, amelyek pont akkor futnak le, amikor egy-egy ilyen esemny bekvetkezik. Ezekbe az esemnyekbe mi rhatjuk meg a szksges programrszeket.

Esemnyek
Az objektumoknak vannak olyan eljrsai, amik akkor futnak le, amikor valami trtnik az objektummal. Ezek az esemny vezrelt eljrsok.

Objektumok keletkezse
Objektumosztly w Az objektumosztlyban rjk le azokat az eljrsokat, amelyeket az objektumnak el kell majd vgeznie. Az objektumosztlyban hatrozzk meg a vltozkat is, amelyek a feldolgozand adatokat troljk. Az objektumosztly tartalmazza az sszes meghatrozst, ami az objektum mkdshez szksges. Az objektumosztly azonban mg nem futtathat egysg! Ez csak egy minta, a tnyleges objektumok ltrehozshoz. Objektum-elforduls w Az objektumosztly teht nmagban nem hasznlhat. A minta alapjn ltre kell hoznunk azt az objektumot amivel dolgozni fogunk. A minta alapjn ltrehozott objektumot objektum-elfordulsnak nevezzk. Ilyet is csinltunk mr, csak pp nem tudtuk, hogy mi trtnik mikzben dolgozunk. Amikor pldul betltjk valamelyik Office alkalmazst, egy minta alapjn ltrehozunk egy objektum-elfordulst, ami pldul a Word, az Excel vagy akr az Access alkalmazs. Teht maga az alkamazs sem ms, mint egy objektum-elforduls. Ugyangy objektum-elforduls
Objektumosztly
A programban hasznlhat objektum mintkat nevezzk objektumosztlynak.

Objektumelforduls
Az objektumosztly alapjn ltrehozott, tnylegesen mkd objektum az objektum-elforduls.

25

Alapfogalmak

1. rsz

egy j munkafzet, j munkalap vagy egy j Word dokumentum. Egy osztlymodul alapjn egyszerre tbb objektum-elfordulst is ltrehozhatunk. Minden jonnan ltrehozott objektumnak sajt egyedi neve van. Kezdetben ez az egyetlen klnbsg az azonos objektumosztlybl ltrehozott elfordulsok kztt. Ksbb az objektum hasznlata sorn azonban sok vltozson megy keresztl egy-egy objektum.

sszefoglals
Amikor valamely Office alkalmazsban makrt gy nevezzk az Excelben rt programokat runk rdemes struktrltan megvalstani. Nagyobb feladatok esetn rjunk tbb kisebb eljrst s ezeket hasznljuk a teljes program felptshez. De mirt kellett megismerkednnk az objektumorientlt programozssal? Mi ezt a technolgit nem fogjuk hasznlni, csak felhasznlni. A programjainkban viszont objektumok tulajdonsgait fogjuk belltani, objektumok metdusait fogjuk futtatni s bizonyos esetekben beleszlunk az objektum mkdsbe. Ezrt lnyeges, hogy megrtsk az objektumok viselkedst. Amikor egy Office alkalmazs el lelnk, a legtbb idt arra rdemes fordtani, hogy megismerkedjnk az objektumokkal.

26

2. fejezet

Objektum-hivatkozsok

mikor felhasznlknt egy Office alkalmazssal dolgozunk, annak az objektumaival vgznk mveleteket. Minden esetben azzal az objektummal dolgozunk, amelyik aktv. Az aktv Excel munkalapot nevezzk t, az aktv munkafzetet mentjk el, nyomtatjuk ki, vagy Word-ben az aktv bekezds jellemzit vltoztatjuk meg. Felhasznlknt teht fontos, hogy aktvv tegyk azt az objektumot, amelyikkel mveletet vgznk. Az elz fejezetben olvastunk az objektumokba zrt vltozkrl, eljrsokrl. Ezekhez csak az objektum- interfszen keresztl frhetnk hozz. Az interfsz els rszben az objektumra kell hivatkozunk. Fontos megjegyezni, hogy programozskor nem csak az aktv objektummal vgezhetnk mveletet, hanem brmelyikkel, amelyikre hivatkozni tudunk. w Mit jelent az objektumok hierarchija? w Mi a gyjtemny? w Mire hasznlhat az objektumdiagram?

Megjegyzs
Ez a fejezet mg csak elmleti fejtegetseket tartalmaz, de ksbb a gyakorlatban is kiprbljuk az itt lertakat.

Az objektumok viszonya
Az Office alkalmazsok objektumai kapcsolatban llnak egymssal, al- s flrendeltsgi viszony van kzttk. Az Excel alkalmazs elindtsa utn megjelenik egy munkafzet. Ebben munkalapok vannak, amik cellkbl llnak. A Word-t szemllve hasonl rendszert fedezhetnk fel. A Word alkalmazsban dokumentumok vannak, a dokumentumokban bekezdsek. Itt is felfedezhetjk az al- flrendeltsgi viszonyt. Az objektum rendszer legfels szintjn minden Office programban maga az alkalmazs ll. Ennek minden alkalmazsban azonos a neve: Application. Ha teht brmely Office alkalmazs programozsakor lerjuk az Application szt, maghoz az adott alkalmazshoz szlhatunk. Excel esetn az Excel-hez, Word esetn a Word-hz, a PowerPoint esetn pedig a PowerPoint-hoz. Az alkalmazsokban a kvetkez eggyel alacsonyabb 27
CD mellklet 02 Fejezet
Excel.pdf Formok.pdf Office.pdf

Alapfogalmak

1. rsz

szinten talljuk az adott alkalmazs dokumentumt. Szemlltesse az Excel objektumok viszonyt 2. bra.

2. bra: Az Excel nhny objektuma


Az objektumok rendszere
Az objektumok egymsba vannak gyazva. Ebbl pl fel az objektumok rendszere.

A 2. brn felfedezhetjk, hogy az alkalmazs magban foglalja az sszes munkafzetet, a munkafzetek pedig a munkalapokat. Ahogy az Excel rszei a program mensorai s eszkztrai is. Ha jl ismerjk az objektumok viszonyt, knnyebben hivatkozhatunk arra az objektumra, melynek a tulajdonsgait szeretnnk megvltoztatni, vagy metdust szeretnnk futtatni.

Gyjtemnyek
Gyjtemny
A gyjtemny olyan objektumok sszessge, melyekre egyenknt s egytt is hivatkozhatunk.

Az 2. brn mg valamit vegynk szre! Jelesl azt, hogy vannak olyan objektumok is, amelyekbl egyszerre tbbre is hivatkozhatunk. Ilyenek a munkafzetek, vagy a munkafzetben tallhat munkalapok. Idnknt egyszerre kell hivatkoznunk az sszes megnyitott munkafzetre, mskor pedig egy kiszemelt munkafzettel vgznk mveleteket. Azok az objektumok, melyeknl nha egy elemre, mskor meg egyszerre az sszesre lehet hivatkozni, a gyjtemnyek. Ez mindjrt felvet egy krdst. Hogy hivatkozhatunk a gyjtemnyek sszes elemre egyszerre, vagy az sszes kzl egyre.

28

2. fejezet

Objektum-hivatkozsok

Elsknt egy formai jegyet rdemes megfigyelnnk. A gyjtemnyek nevei minden esetben tbbes szmban vannak. gy a munkafzetek neve Workbooks, a munkalapok Worksheets a cellk Cells. Minden elnevezs az angol nyelv tbbes szm ragjval, az s-sel vgzdik. Ha pldul szeretnnk megtudni, hogy hny munkafzet van nyitva az Excel-ben, vagy egy adott munkafzet hny munkalapbl ll, akkor a gyjtemnyre kell hivatkoznunk.
FuzetSzam = Workbooks.Count LapSzam = Worksheets.Count

A gyjtemny minden eleme


A gyjtemny minden elemre a gyjtemny nevvel hivatkozhatunk.

A fenti kt pldban megszmoltuk kt gyjtemny elemt. Ezeket egy-egy vltozban troltuk. Az els programsor az Excel-ben megnyitott munkafzeteket szmllta meg, a msodik az aktv munkafzet munkalapjainak szmt rta a vltozba. Most nzzk meg azt is, hogy a gyjtemny egyik elemt kiszemelve hogyan kell lernunk a hivatkozst. Erre a gyjtemny Item tulajdonsgt hasznljuk. Nzzk meg, hogy az aktv munkafzet egyik munkalapjra hogyan lehet rmutatni. Erre kt mdszert is biztost az Excel. Az egyik esetben a gyjtemny sorszmt, a msik esetben a nevt hasznljuk.
Neve = Worksheets.Item(1).Name Neve = Worksheets.Item("Munka1").Name

Szveglland
A szvegllandt idzjelek kz kell rnunk.

Mindkt parancs a Neve vltozba rja annak a munkalapnak a nevt, amire hivatkoztunk. Mgis mi a klnbsg a kt hivatkozs kztt? Az els esetben a gyjtemnyben elfoglalt helynek megfelel sorszmot rtuk be az Item tulajdonsg zrjelei kz, mg a msik esetben szvegllandknt idzjelek kz a munkalap nevt. Az els parancs teht a munkafzet sorrend szerinti els munkalapjnak nevt rja a Neve vltozba. Itt a munkalap helye a meghatroz. A msodik parancssor a Munka1 nev munkalap nevt trolja. A msodik hivatkozs esetn mindegy, hogy a munkafzetben fizikailag hol tallhat a Munka1 nev munkalap. Legyen brhol, a munkafzetben, elvgezhetjk vele a megfelel mveletet. A gyjtemny egy elemre teht hivatkozhatunk a helye vagy a neve szerint. Mivel a gyjtemnyek elemeire gyakran kell hivatkoznunk programjainkban, ezrt a Visual Basic megenged egy rvidebb rsmdot is. Ilyenkor nem kell bernunk az Item tulajdonsg nevt. Az elz kt parancs teht a kvetkez rsmddal is teljesen helytll:
Neve = Worksheets(1).Name Neve = Worksheets("Munka1").Name

A gyjtemny egy eleme


A gyjtemny egy elemre a neve mgtti zrjelek kz rt szmmal, vagy szvegllandval hivatkozhatunk.

29

Alapfogalmak

1. rsz

Ennl az rsmdnl nem rjuk be az Item tulajdonsg nevt, de mg a tulajdonsgok elvlasztsra hasznlt pont opertort sem. Egyszeren a gyjtemny neve mgtti zrjelek kz berjuk a gyjtemny elemnek azonostsra szolgl rtket. Programozskor rendszerint ezt az rsmdot hasznljk a rvidsge miatt. Programozsi szakknyveket olvasva gyakran tallkozhatunk azzal, hogy egy gyjtemny egy elemre pldul egy adott munkalapra a knyv egyes szmban szl. Valahogy gy: lltsuk be a munkalap (Worksheet) Name tulajdonsgt egy adott rtkre. Ez kiss zavar lehet, mert azt gondolhatnnk, hogy gyis hivatkozhatunk, hogy Worksheet. Nem! Ez csak annyit jelent, hogy a gyjtemny egy elemre mutatunk r, az elbb ismertetett mdszerek egyikvel. Helyesen teht pldul gy:
Worksheets(1).Name = "Szmlk"

Hivatkozsi tvonal
Valban igaz az, hogy nem kell aktvv tennnk azt az objektumot, amivel mveletet szeretnnk vgezni. Mgsem kzmbs, hogy melyik objektum aktv a hivatkozs pillanatban. Ez valami olyasmi, mint amikor az utcai informcis trkpen az Itt ll n felirat egy kiindulsi pontot jell. A mi esetnkben azt jelenti, hogy nem kell lernunk azt az tvonalat, amivel eljutunk az ppen aktv objektumhoz.

3. bra: Az aktv objektumhoz viszonytva hivatkozhatunk!

30

2. fejezet

Objektum-hivatkozsok

Kezdjk azzal a felttelezssel, hogy egy adott pillanatban a 3. brnak megfelelen a Munkafzet1 munkafzet Munka3 munkalapja aktv. Vizsgljuk meg, hogy innen hogyan hivatkozhatunk egy kiszemelt objektumra. Ha az ppen aktv munkalap A1-es celljba szeretnnk berni az Excel szt, ezt a kvetkez utastssorral tehetjk meg:
Range("A1") = "Excel"

A Range objektummal az aktv munkalap tetszleges cellatartomnyra hivatkozhatunk. Ennek a zrjelei kz rjuk be a mdostani kvnt tartomny Excelben hasznlatos hivatkozst szvegllandknt. A kiadott parancs hatsra az ppen aktv munkalap A1-es celljba kerl az Excel sz. Ha ugyanebbe a munkafzetbe, egy ppen nem aktv munkalap valamelyik celljba pldul az A1-esbe szeretnnk rni az Excel szt, akkor meg kell azt is mondanunk, hogy melyik az a munkalap, amire gondolunk. Nem kell aktvv tennnk, csak r kell mutatnunk, gy:
Worksheets("Munka2").Range("A1") = "Excel"

Ez a parancssor annyiban tr el az elztl, hogy itt meghatroztuk azt a munkalapot is, amelyik A1-es celljba szeretnnk rni. Nem tettk aktvv, csak rmutattunk! A munkafzetet ebben az esetben azrt nem kellett meghatroznunk, mert az ppen aktv volt. Ha nem a neve, hanem a sorszma szerint szeretnnk hivatkozni egy munkalapra, akkor ezt a kvetkez mdon tehetjk meg:
Worksheets(2).Range("A1") = "Excel"

Most rjuk be az Excel szt a Munkafzet2 ppen nem aktv munkafzet msodik, Munka2 munkalapjnak B2-es celljba. Ehhez mr azt is meg kell mondanunk, hogy melyik fzet melyik lapjnak melyik tartomnyba szndkozunk rni. me:
Workbooks("Munkafzet2").Worksheets("Munka2").Range("A1") = "Excel"

Ezt is megadhatjuk gy, hogy a gyjtemnyben elfoglalt helye szerint, sorszmmal hivatkozunk. A munkafzetek a ltrehozs vagy megnyits szerint szmozdnak. Teht:
Workbooks(2).Worksheets(2).Range("A1") = "Excel"

Berhatunk a Munkafzet2 munkafzet ms munkalapjra is. Ekkor a megfelel lapra kell mutatnunk. Ha pldul a Munka1 munkalap A1-es celljba runk, akkor ezt gy kell a programba rni:

31

Alapfogalmak
Workbooks("Munkafzet2").Worksheets("Munka1").Range("A1") = "Excel"

1. rsz

Az Application objektumszintre ritkn lpnk vissza, mert ha Excelben programozunk, akkor az Excel objektum mindig aktv.

Application 1 AutoCorrect WorkBooks RecentFiles Addins Names CustomViews Windows Panes 3 Shapes LinkFormat OLEFormat ShadowFormat Hyperlink FillFormat ControlFormat ConnectorFormat Comments HPageBreaks VPageBreaks Hyperlinks Names Adjustment CallOutFormat FreeFormBuilder GroupShapes LineForrmat PictureFormat ThreeDFormat TextEffectFormat ShapeNodes TextFrame Characters Scenarios OLEObjects Outline PageSetup QueryTables Parameters PivotTables PivotCache PivotFormulas PivotFields PivotItems ChartObjects Chart Windows Panes 2 DocumentProperties VBProject Mailer WorkSheets CommandBars PivotCaches RoutingSlip

4. bra: Az Excel objektumdiagramja, 1. rsz

32

2. fejezet

Objektum-hivatkozsok

Objektumdiagram
Mivel az Excel-nek elg sok objektuma van, mindenkppen rdemes megismerkedni azzal a trkppel, ami felfedi az objektumok teljes rendszert.

1 WorksheetFunction CommandBars 2 Charts Axis AxisTitle Gridlines TickLabels 3 Range Areas Borders Font ChartArea Interior ChartFillFormat Name PlotArea SoundNote DataTabe Style Border Hiperlinks Font Shape Range FormatConditions Validation Comment Characters Legend LegendEntries LegendKey Border DataLabels Points DataLabel Interior LeaderLines ErrorBars Series TickLabels HiLoLines Corners PageSetup Shapes Floor Walls ChartTitle Series DropLines ChartGroups DownBars UpBars SeriesLines Borders Font Interior FileSearch FileFind VBE Assistant ODBCErrors Names Styles

5. bra: Az Excel objektumdiagramja, 2. rsz

33

Alapfogalmak

1. rsz

Ezt szemllteti a 32-33. oldalakon tallhat 4. s 5. bra. A rajz tglalapjai olyan objektumokat jellnek, amelyeket gyjtemnyknt rhetnk el, az ellipszisek pedig olyanokat, amelyeket egyszer objektumknt. Itt felfedezhetjk azt is, hogy a gyjtemnyek neveit tbbes szmban, mg az objektumok neveit egyes szmban olvashatjuk. A kznsges nem gyjtemnyknt kezelt objektumokra egyszeren a nevkkel hivatkozhatunk. A nevk utn, ponttal elvlasztva berhatjuk a hasznlni kvnt tulajdonsg vagy metdus nevt. Ha pldul az Excel alkalmazs nevt szeretnnk egy vltozban trolni, akkor ezt a kvetkez mdon rhatjuk a programunkba:
ProgNeve = Application.Name

Itt nincs Item tulajdonsg s nincs zrjel az objektum neve mgtt. Az objektumdiagram jl szemllteti, hogy az objektumok miknt viszonyulnak egymshoz. Lthatjuk azt, amirl eddig olvastunk, hogy az alkalmazsban (Application) talljuk a munkafzeteket (Workbooks) s ezen bell a munkalapokat (Worksheets). A gyjtemnyek jellst rdemes egy kicsit jobban is szemgyre venni. A gyjtemnyek esetn nem tudhatjuk elre hogy hny eleme lesz. Ezrt jellik csak a gyjtemnyeket. Ezt gy kell rtelmeznnk, hogy egy-egy gyjtemnyt jell tglalap tartalmazza a gyjtemnyt s annak elemeit is. Amikor azt ltjuk, hogy a Workbooks gyjtemny magban foglalja a Worksheets gyjtemny elemeit, azt gy kell rtennk, hogy a Workbooks gyjtemnyen bell van a munkalapok gyjtemnye s az sszes eleme. Ms szval egy munkafzetben sok munkalap lehet, s benne van az sszes lap sszes eleme, ami az adott munkafzethez tartozik. Ezt a diagram ttekinthetsge miatt brzoljk gy. Az itt kzlt objektumdiagramot jl felhasznlhatjuk a programozsi feladatok megoldsa kzben.

sszefoglals
Ha teht programbl szeretnnk mveletet vgezni egy munkafzettel, munkalappal vagy cellval, akkor hivatkoznunk kell r. A hivatkozst minden esetben ahhoz a ponthoz viszonytjuk, amelyik aktv. Az ppen aktv objektum hivatkozst nem kell lernunk, ezt alaprtelmezettnek tekinti a program. Az objektumok rengetegben az objektumdiagram segtsgvel tjkozdhatunk. Ha szeretnnk megismerni az Excel programozst, az egyik legfontosabb teendnk, hogy megismerjk az Excel objektumait. Ez fradtsgos s hosszadalmas munka. A legnagyobb segtsg a megismers folyamat-

34

2. fejezet

Objektum-hivatkozsok

ban, a makrfelvtel. A felvtelt elemezhetjk s sokat tanulhatunk belle. Ennek a knyvnek nem clja az, hogy bemutassa az sszes objektumot. Az viszont igen, hogy bemutassa, milyen mdszerrel rdemes belefogni az ismerkedsbe. Az Excel objektumok lersa tbb mint ezer oldal lenne. Mi inkbb a programozs mdszert s eszkzeit ismerhetjk meg ebbl a knyvbl.

35

Visual Basic for Application

2. rsz

A 2. rsz tartalmbl
A msodik rszben a Visual Basic for Application (VBA) programnyelvvel ismerkednk meg. Ezt a nyelvet hasznljuk minden Office alkalmazs programozsa, makrzsa kzben. A nyelv ismerete elengedhetetlen, de nem elgsges felttele annak, hogy programozhassuk az Excelt.

3. fejezet

Visual Basic Editor

a tkapcsolunk a Visual Basic Editor felletre, akkor a munkafzeteinket ms nzpontbl lthatjuk. Ebben a nzetben a munkafzet neve Projekt. A VBA programok projektekre plnek, a projekt teht egy programozsi egysg. A projektek modulokat tartalmaznak, ahova megrhatjuk azokat a programokat, amire szksgnk van. A modulokba eljrsokat fogunk rni. Egy-egy eljrsban jl krlhatrolhat programrszeket runk. Az eljrsokat ksbb ptkockaknt felhasznlva lltjuk ssze a teljes programot. Vagyis, egy teljes program tbb modulbl s tbb eljrsbl llhat. Ebben a fejezetben a kvetkez krdsekre keressk a vlaszt: w w w w Hogyan jelenthetjk meg a Visual Basic Editor-t? Milyen rszekbl ll a Visual Basic Editor? Melyek a programszerkeszts eszkzei? Hogyan hasznlhatjuk a modulokat?

Visual Basic Editor (VBE)


A VBE egy nll program, amit minden Office alkalmazsbl elindthatunk. Tltsk be az Excel-t s indtsuk el. Betlts utn hajtsuk vgre az Eszkzk [Tools] Makr [Macro] Visual Basic Editor utastst. A kiadott parancs hatsra megjelenik egy jabb program. Ez a Visual Basic Editor! Az eredmnyt a 40. oldalon tallhat 6. bra mutatja be. A VBE-ben tbb segdablak is rendelkezsnkre ll. Ezek mindegyike a programozs klnbz fzisait tmogatja. Alaprtelmezsben ha ms ablakot nem kapcsolunk be a Project (projekt) ablak s a Properties (tulajdonsg) ablak lthat. Kezdjk teht az ismerkedst ezekkel!
VBE
A Visual Basic Editor egy nll program, amit csak az Office alkalmazsokbl indthatunk el. Ez a programozs szntere.

39

Visual Basic for Application

2. rsz

6. bra: A Visual Basic Editor program

Projekt ablak
Projekt
A projekt egy munkafzet, a benne tallhat objektumokkal, modulokkal.

A Projekt ablakban a megnyitott munkafzeteket ltjuk. Felfedezhetjk, hogy egy-egy munkafzet a programozs oldalrl nzve megfelel egy-egy projektnek. Lehet, hogy tbb projektet tallunk, mint amire szmtottunk. Ez annak ksznhet, hogy az Excelben a bepl makrk munkafzetben vannak, s ezek is megjelennek a programozsi felleten. A programmal szlltott bepl makrk tartalmt nem jelenthetjk meg, mivel azokat a Microsoft jelszval levdte. Az Excel objektumok moduljai w Vajon mirt van szksg arra, hogy itt is megtalljuk a megnyitott mukafzeteket a bennk tallhat sszes munkalapot? A Projekt ablak megmutatja neknk a projektben tallhat sszes modult. Az Excelben minden munkalaphoz s munkafzethez tartozik egy-egy modul. Ezek osztlymodulok, amelyek az egyes objektumok esemnyvezrelt eljrsait tartalmazzk. Errl ksbb rszletesen beszlnk az objektumok esemnyeit ismertet fejezetben. Ha szeretnnk ltni egy modul tartalmt, knnyen megjelenthetjk, ha ketts kattintssal rkattintunk a projekt ablakban a megfelel objektumra. Tegyk is meg! (lsd 41. oldal 7. bra)

Objektum modul
Az Excel minden objektumhoz tartozik egy osztlymodul. Ebben talljuk az esemnyvezrelt eljrsokat.

40

3. fejezet

Visual Basic Editor

7. bra: Egy munkalap objektumhoz tartoz osztlymodul megjelentse 1. Kattintsunk kettt a Munkafzet1-es munkafzet Munka1-es objektumra! 2. Megjelenik az objektumhoz tartoz osztlymodul. A megnyitott modulba egyenlre mg semmit nem runk, de ez lesz az egyik hely, ahova majd a programjainkat, ms szval a makrinkat rjuk. A modul egy olyan fellet, melyben egyszer szvegszerkesztsi mdszerekkel rhatjuk meg eljrsainkat, programjainkat. Egy megnyitott modult a modul ablak jobb fels sarkban tallhat x-el tehetnk lthatatlann. gy nem lezrjuk, csak elrejtjk. Felhasznli modul w A programozs sorn szksgnk lehet tovbbi modulokra, vagy felhasznli rlapokra. Ezek is az adott projekt rszei lesznek. Ez egyben azt is jelenti, hogy amikor elmentnk egy Excel munkafzetet, vele egytt mentjk a projektbe beptett modulokat s az azokba megrt eljrsokat. Az ltalnos vagy ms szval felhasznli modult neknk kell majd a projektbe illeszteni. A mveleteket a kvetkezk szerint hajtsuk vgre. A lpsek megrtst segti a 42. oldal 8. brja. 1. A Projekt ablakban jelljk ki annak a projektnek brmely objektumt, amelybe az j modult szeretnnk ltrehozni. 2. Hajtsuk vgre az Insert Module parancsot! 3. Az j modul megjelenik a projekt ablakban is s az editorban is.

Figyelem!
Az objektumokhoz tartoz modulok osztlymodulok. Ennek az ismeretnek ksbb mg jelentsge lesz!

Felhasznli modul
Ez nem tartozik objektumhoz. Az ltalnos vltozk s eljrsok helye.

41

Visual Basic for Application

2. rsz

8. bra: j felhasznli modul ltrehozsa Ugyanezzel a mdszerrel hozhatunk ltre sajt osztlymodult, vagy j felhasznli rlapot. Ezek mind a projekt rszei lesznek, s az adott munkafzettel egytt kerlnek mentsre.

Egyedi modulok kezelse


Egyedi modulok
Azokat a modulokat nevezzk egyedieknek, melyek nem az Excel objektumaihoz kapcsoldnak. Ilyenek a felhasznli modulok, az rlapok s az osztlymodulok.

Ha egyedi, felhasznli modulokat szrtunk be a projektbe, akkor ezeket kln is elmenthetjk, vagy trlhetjk ha feleslegess vltak. Ms esetben kln megrt ksz eljrsokat, programrszeket tartalmaz modulokat kapcsolhatunk hozz a projekthez. Modul elmentse w Termszetesen igaz, hogy a munkafzettel a projekt moduljait is mentjk. rdemes azonban egy msik mentsi mdszert is megismerni. Ez a modulok exportlsa. Ha a Project ablakban az egr jobb gombjval rkattintunk egy egyedileg beillesztett modulra, akkor a helyi menben kivlaszthatjuk az Export File utastst. Ezzel kln, a munkafzet elmentse nlkl is trolhatjuk a kivlasztott modult a httrtrolnkon. Erre vonatkoz utastst tallunk a File menpont alatt is. Az elmentett fjl tpusa *.bas lesz. Ezt a modult ksbb ms Office alkalmazsokban vagy a Visual Basic 6.0-ban felhasznlhatjuk. Teht az egyik pro-

42

3. fejezet

Visual Basic Editor

jektbl a msikba juttathatjuk moduljainkat s a bennk lv programjainkat. Kls modul betltse w Az importlssal kls modult tlthetnk be. A projekt ablakban az egr jobb gombjval kattintsunk arra a projektre, amelyikbe szeretnnk betlteni egy modult. A helyi menbl vlasszuk ki az Import File utastst. Keressk meg a korbban elmentett modult s tltsk be. A modul betltsvel egytt a benne megrt eljrsokat is betltttk, gy az jabb projektben (dokumentumban) mr nem kell megrnunk ezeket az eljrsokat. Modul trlse w Ha valamilyen okbl feleslegess vlik egy ltalunk ltrehozott modul, akkor azt trlhetjk a projektbl. Ismt az egr jobb gombjnak vesszk hasznt. A helyi menben megtalljuk a Remove XXX utastst. Egy modul eltvoltsakor megjelenik egy krds az esetleges mentsre vonatkozan. Itt eldnthetjk, hogy ms projektek rszre flretesszk-e a trlni kvnt modult vagy sem. Teht a Project ablak felels a projektben elhelyezett modulok kezelsrt. A projekt ablakban vehetnk fel jabb modulokat, vagy itt jelenthetjk meg az Excel objektumokhoz rendelt osztlymodulokat.
Tulajdonsg ablak
Az Excel s az rlapok objektumainak a tulajdonsgait megjelent ablak. Itt mindig annak az objektumnak a tulajdonsgai jelennek meg, amelyiket kijelltk.

Tulajdonsg ablak
A projekt segdablak alatt tallunk egy msik ablakot. Ez a Properties window, magyarul tulajdonsg ablak. Amint a projekt ablakban megvltoztatunk egy Excel objektum kijellst, megvltozik a tulajdonsg ablak tartalma is. Itt mindig annak az objektumnak ltjuk a tulajdonsgait, amelyiket a projekt segdablakban kijelltk. Ezek azok a tulajdonsgok, amelyeket a programozs sorn is fel fogunk hasznlni. Ennek a segdablaknak az a szerepe, hogy bellthassuk azokat a tulajdonsg rtkeket, amiket az egyes ltalunk rt program futsa eltt szksges meghatroznunk. Ennek az ablaknak leginkbb az egyedi, felhasznli rlapok ksztsekor fogjuk hasznt venni.

Segdablakok
A VBE sok segdeszkzzel tmogatja a programozst. Ilyen eszkzk a megjelenthet segdablakok. Ezekrl ejtnk nhny szt a kvetkez rszben. Immediate Window (prba ablak) w Ez a segdablak alaprtelmezsben nincs bekapcsolva. Ahhoz, hogy megjelentsk, vlasszuk ki a View Immediate

Prba ablak
A parancsok azonnali vgrehajtst teszi lehetv.

43

Visual Basic for Application

2. rsz

Window utastst. Az utasts vgrehajtsa utn a VBE ablak jobb als rszn megjelenik egy j segdablak. Ebben a segdablakban kzvetlenl kiadhatunk Visual Basic utastsokat, amelyeket az ENTER billenty letse utn azonnal vgre is hajt a program. Ezt a lehetsget a ksbbi ismerkeds sorn mi is kihasznljuk.
Helyi ablak
A fut program vltozinak s objektumtulajdonsgainak pillanatnyi rtkt mutatja meg.

Locals Window (helyi ablak) w Egy-egy j eljrs elksztse sorn nem biztos, hogy a program pontosan azt a feladatot vgzi el, amit terveztnk. Ilyen esetben meg kell keresnnk az elkvetett hibt. Az egyes eljrsok futtatsa sorn szksgnk lehet arra, hogy az eljrsok vltozinak s az objektumok tulajdonsgainak rtkt megjelentsk. Ezt szolglja a Locals window. Alaprtelmezs szerint ez sem lthat, bekapcsolni a View Locals window utastssal lehet. Watch Window (figyels ablak) w Ennek az ablaknak a szerepe egy kicsit hasonlt a Locals Window-hoz, azzal a klnbsggel, hogy itt meghatrozhatjuk, hogy mely vltozkat s kifejezseket szeretnnk figyelni. Bekapcsolni a View Watch window utastssal lehet. Brmely segdablakot a jobb fels sarokban tallhat x-szel zrhatjuk be. Egyelre elgedjnk meg ennyivel, de a ksbbiekben rszletesen elolvashatjuk a felsorolt segdablakok hasznlatt.

Figyels ablak
A kivlasztott vltozk tartalmt jelenthetjk meg ebben az ablakban.

Eljrsok szerkesztse
Eljrs ltrehozsa
Az egyedi eljrsokat mi hozzuk ltre. Az eljrst a Sub s End Sub utastspr kz rjuk.

Mivel mr tudjuk, hogyan hozhatunk ltre j modult tovbb lphetnk eggyel. Hozzunk ltre j eljrst! Figyeljk meg a VBE viselkedst, mikzben programot runk egy modulba. Egy res munkafzetbe ksztsk el els eljrsunkat ennek kapcsn megismerkedhetnk nhny szerkesztsi lehetsggel. Ha van mr j munkafzetnk ez a programozs szempontjbl egy j projekt , akkor trjnk vissza a VBE programba. A programozsi knyvek tbbsgben az els feladat a Hell vilg program. Ettl most se trjnk el. Az ppen aktv munkalap A1-es celljba rjuk be ezt a szveget program segtsgvel. Az j projektbe az elbb megismert mdon hozzunk ltre egy modult. Tegyk aktvv a projektet s hajtsuk vgre az Insert Module utastst. A megjelen modulba gpeljk be az els programunkat, de kzben figyeljnk mindarra, ami a bers kzben trtnik. 1. A program berst kezdjk el azzal, hogy rjuk le a sub ElsoMakro szveget, mintha csak egy szvegszerkesztben lennnk.

44

3. fejezet

Visual Basic Editor

2. ssk le az ENTER billentyt. Ennek hatsra a program szvege ilyen lesz:


Sub ElsoMakro() End Sub

A Sub utasts csak a prjval az End Sub paranccsal egytt rvnyes. A Sub s End Sub kz kell rnunk a programot. A VBE befejezi az utastspr berst. A szvegkurzor bell a Sub s End Sub utastsok kztti sorra, hiszen ide kell rni az eljrs utastsait.

9. bra: Az els sajt eljrs megrsnak lpsei 3. A programtest parancsait illik beljebb kezdeni, ezrt ssk le a Tab billentyt s gpeljk be a parancs elejt: Range( Figyeljk meg, hogy a VBE felknlja az objektumba rhat argumentumokat egy kis srga panelben. Ez ksbb nagy segtsget jelent majd.

45

Visual Basic for Application

2. rsz

4. Majd fejezzk be a parancsot a kvetkezkppen: "a1") = "Hell vilg"

10. bra: Az els eljrs futtatsnak eredmnye Indtsuk el a megrt programot. lljunk az eljrs els sorra s adjuk ki a Run Run Macro utastst. Nzzk meg az eredmnyt. Kapcsoljunk vissza az Excelbe s nzzk meg az ppen aktv munkalap A1-es celljt (10. bra). Az eljrs elindtsnak msik mdja, hogy a szvegkurzorral bellunk a Sub utastssorba s letjk az F5-s funkcibillentyt. Ennek nagy hasznt fogjuk venni a programozs sorn, mivel az eljrsokat tbbszr is el kell indtanunk, hogy ellenrizhessk mkdsket. Minl gyorsabban el tudjuk indtani az ellenrzend eljrst, annl kevesebb idt fogunk tlteni a programban elkvetett hibk keressvel. A Visual Basic Editor tovbbi szolgltatsait, lehetsgeit majd a gyakorlatok sorn fogjuk rszletesebben megismerni.

sszegezve
A munkafzet programozsi oldalrl nzve Project . Ez a programozs legnagyobb egysge. A Project-ben talljuk azokat a modulokat, ahova programokat rhatunk. A Projekt-be illesztett modulokat az Excel a munkafzettel egytt elmenti. Vagyis a modulok a munkafzet rszei. A modulokban eljrsok vannak. Ezek egy rszt az objektumok tartalmazzk (esemnyvezrelt eljrsok). A tbbi eljrst mi hozzuk ltre. A Visual Basic Editor segdablakokkal tmogatja munknkat. A Project ablak a modulok kezelst teszi lehetv, a tulajdonsg ablak az pp kijellt objektum tulajdonsgait jelenti meg. Az Immedate, a Locals s Watch ablakok a program belvst szolgljk. Ezek hasznlatrl rszletesen olvashatunk a program finomtsa fejezetben.

46

4. fejezet

Vltozk meghatrozsa

r megbeszltk, hogy a programozs clja az adatfeldolgozs automatizlsa. Ennek tkrben ismerkedjnk meg a vltozk s az llandk hasznlatval. A feldolgozand adatokat kzbe kell vennie a programnak. Ehhez az adatokat vltozkban troljuk. Tudnunk kell, hogy milyen adatokat trolhatunk a vltozkban, s hogy milyen lehetsgeink vannak a vltozk hasznlatra. A fejezet krdsei a kvetkezk: w Milyen adattpusokat kezel a Visual Basic for Application? w Mit jelent a vltozk deklarlsa? w Hogyan hatrozzuk meg a vltozkat?

A Visual Basic adattpusai


A program futsa alatt a vltozkat s az llandkat az operatv memriban troljuk. A klnfle adattpusokhoz ms-ms mret terletet kell lefoglalni. A memriaterlet mrett mi hatrozzuk meg azzal, hogy megadjuk az adat tpust. A kvetkezkben tekintsk t, hogy melyik adattpus mekkora helyet foglal az operatv trbl s milyen, mekkora rtkeket rhatunk bele. A vltozk tpust hrom kategriba sorolhatjuk; a numerikus szmokat tartalmaz , a string szveget tartalmaz s az egyb adattpus, amely egyik elzbe sem illik bele.
Adattpusok
A vltozk adattpusai segtsgvel gazdlkodhatunk az operatv memriban lefoglalt helyek mretvel.

Numerikus adattpusok
A numerikus vltoztpusban szmokat trolunk. Amikor helyet foglalunk egy vltoznak, szeretnnk minl kisebb memria terletet felhasznlni erre a clra. Azrt arra gyeljnk, hogy a lefoglalt terleten minden lehetsges rtket el tudjunk helyezni. Minl kisebb terletet foglalunk le 47

Visual Basic for Application


Numerikus adatok
A numerikus adatokat kettes szmrendszerbeli szmm konvertlja a program s gy helyezi el a memriban.

2. rsz

a vltoz szmra, annl kisebb rtkek frnek ez az adott helyen. Ennek megfelelen mindig a legkisebb mg elgsges nagysg helyet foglaljuk le. Nzznk meg egy deklarl helyfoglal utastst. A deklarcis utastsokat ksbb rszletesen megismerhetjk, most csak az adattpus meghatrozsra figyeljnk.
Dim intSzamlalo As Integer

Az utasts Dim kulcsszava a deklarl utasts. Ezt a vltoz neve kveti, amit tetszlegesen hatrozhatunk meg, termszetesen betartva a Visual Basic elrsait. Az utastst valjban a kiemelt As Integer miatt nztk meg. Ez a vltoztpusok meghatrozsnak az egyik mdja. A felsorolt szmtpusok kzl a Byte, Integer s a Long egsz, a Single, Double lebegpontos s a Currency tpus fixpontos szmok trolsra alkalmas. Az egyes vltoztpusok hosszt s a bennk trolhat rtkeket a 1. tblzatban soroljuk fel. 1. tblzat: Numerikus adattpusok
Adattpus Byte Integer Long Single Double Currency Negatv rtk 0 - 32 768 - 2 147 483 648 - 3,4*1038 - 1,79*10308 - 9,22*1011 Pozitv rtk 255 + 32 767 + 2 147 483 647 + 3,4*1038 + 1,79*10308 + 9,22*1011 6 jegy 14 jegy 4 tizedesjegy Pontossg Helyfoglals 1 bjt 2 bjt 4 bjt 4 bjt 8 bjt 8 bjt

String adattpus
String adattpus
A String adattpus a szveg betinek a kettes szmrendszerbeli kdjait trolja az operatv memriban.

A String adattpus vltozkban szveges adatokat karakterlncokat trolhatunk. A karakterlnc jelentse nem ms, mint tetszleges karakterekbl ll betsorozat. Az angol string sz lncot jelent, innen a tpus elnevezse. A vltoz hossza a benne trolt karakterek szmtl fgg. A trolhat karakterek kdjnak 0 s 255 kz kell esnie. A String tpus vltozban a leghosszabb trolhat szveg 231 betbl llhat. Ha szksges, elre meghatrozhatjuk a trolhat karakterek szmt. Ebben az esetben a vltozban trolt karakterlnc hossza nem lehet tbb, mint amekkort elre meghatroztunk. A rgztett hosszsg karakter-

48

4. fejezet

Vltozk meghatrozsa

lnc hossza maximum 216 karakter lehet. A szveges vltoz deklarlsa a kvetkez:
Dim strNeve As String

Ez a deklarci egy elre nem meghatrozott hosszsg karakterlnc trolst teszi lehetv. Ha szeretnnk meghatrozni a trolhat karakterek szmt is, akkor ezt a kvetkezkppen tehetjk meg:
Dim strNeve As String * 10
Hossz megadsa
A String adattpus hosszt a vltoznv mg rt szorzssal hatrozzuk meg.

A vltoztpus utn lert * 10-zel hatroztuk meg, hogy milyen hosszsg szveg karakterlnc szmra foglaltunk helyet az operatv trban. Ha meghatroztuk a vltozt, akkor annak ksbb rtket is szeretnnk adni. Nzzk meg azt az utastst, amelyben a strNeve vltoznak rtket adunk:
strNeve = "Kovalcsik"

Egyb adattpusok
A programban hasznlt logikai kifejezsek eredmnyt logikai vltozkban trolhatjuk. A dtumok feldolgozshoz rendelkezsnkre ll egy dtum vltoztpus. Bizonyos esetben pedig nem tudjuk elre, hogy milyen tpus lesz az adat, amit a vltozban trolni fogunk. Lttuk, hogy amikor egy objektumra hivatkozunk, a hivatkozs hossz is lehet. Ezeket a hivatkozsokat rvidthetjk le, ha vltozban troljuk a hivatkozst. Ahhoz, hogy a felsorolt adatokat trolhassuk, szksgnk van olyan adattpusokra, melyek ezt lehetv teszik. Boolean adattpus w A logikai vltozk csak ktfle rtket vehetnek fel. Logikai igaz rtket TRUE , vagy hamis rtket FALSE. A Visual Basic kt bjt hosszsg terletet foglal le a Boolean adattpus vltozk szmra. A logikai vltoztpus meghatrozsra a kvetkez utastst rjuk a programba:
Dim bolValasz As Boolean
Boolean tpus
Logikai rtkek trolsra ltrehozott vltoztpus. rtke True vagy False lehet.

Date tpus
A dtumot szmknt trolja a program. Az egsz rsz a napot, a trt rsz pedig az rt s a percet rgzti.

Date adattpus w A dtum adattpus valjban egy vals trt szm, ami egy idpont trolsra hasznlhat. A szm egsz rsze a dtumot, pldul: 2000. jlius 28. hatrozza meg, a trtrsze pedig az idpontot 12 ra 28 perc. Az dtum napja 100. janur 1. s 9999. december 31. kztt lehet. Deklarlsa a kvetkez:

49

Visual Basic for Application

2. rsz

Dim datFizetesiDatum As Date


Variant adattpus
Ez az alaprtelmezett adattpus. Ebben a vltoztpusban brmilyen rtket trolhatunk.

Variant adattpus w Elfordulhat, hogy elre nem tudjuk, hogy mi lesz az adattpusa a vltoznak, amit trolni fogunk. Ilyen esetekben hasznlhatjuk a Variant adattpust. Ez az alaprtelmezett adattpus, vagyis ha nem hatrozzuk meg a vltoz tpust, az Variant lesz. Teht ezt az adattpust ktflekppen is meghatrozhatjuk. A kvetkez kt tpus-meghatrozs eredmnye azonos:
Dim varVegyes_1 Dim varVegyes_2 As Variant

Adattpus meghatrozsa elnevezssel


A vltozk adattpust meghatrozhatjuk gy is, hogy a vltoznevet egy tpus-meghatroz karakterrel zrjuk be. A tpus-meghatroz karakterek ugyangy meghatrozzk a vltoz tpust, mint az As kulcssz mg rt tpusnv. Ennek megfelelen az As kulcsszt s tpusnevet nem hasznlhatjuk egy olyan vltoz esetn, amelyet tpus-meghatroz karakterrel fejeztnk be. Egy szveg tpus vltozt pldul gy is meghatrozhatunk:
Dim Szoveg$

A vltoznv mgtti $-jel a tpus-meghatroz karakter. Ez egyenrtk az As String tpus-meghatrozssal. A Visual Basic nyelvben a kvetkez tpus-meghatroz karaktereket hasznlhatjuk: A 2. tblzat harmadik oszlopban felsorolt deklarlsok soronknt azonos adattpust hatroznak meg. A tbbi vltoztpusnak nincs tpus meghatroz karaktere. 2. tblzat: A tpus-meghatroz karakterek
Tpus String Integer Long Single Double Currency Karakter $ % & ! # @ Deklarci Dim Szoveg$ vagy Dim Szoveg As String Dim EgeszSzam% vagy Dim EgeszSzam As Integer Dim Hosszu& vagy Dim Hosszu As Long Dim Egyszeres! vagy Dim Egyszeres As Single Dim Dupla# vagy Dim Dupla As Double Dim Penz@ vagy Dim Penz As Currency

50

4. fejezet

Vltozk meghatrozsa

Mivel egyelre az adattpusokkal foglalkozunk, elgedjnk meg ennyivel. Ksbb, amikor mr megismerkedtnk a deklarlssal is, ki fogjuk prblni a felhasznli tpus programozst.

Vltozk meghatrozsa
Amikor vltozt deklarlunk, akkor nem tesznk mst, mint helyet foglalunk az operatv trban. Mivel a Visual Basic egy magas szint programnyelv, nem kell tudnunk, hogy fizikailag hol is lesz az a hely, amit lefoglaltunk. A lefoglalt helyre a vltoz nevvel hivatkozunk.

A vltozk neve
A vltozk nevt gy hatrozzuk meg, hogy jelezze azt, mire hasznljuk. Szerencss, ha az is kiderl a nvbl, hogy milyen adattpus. A vltozk nevnek meghatrozsakor be kell tartanunk nhny elrst. Ezek a kvetkezk: w A vltoz neve nem lehet hosszabb mint 255 karakter. w Az els karakternek betnek kell lennie. w A vltoz neve nem tartalmazhat pontot, szkzt; s a !, @, #, &, % s $ karakterek csak a vltoznv vgn szereplehetnek (ha gy hatrozzuk meg a tpust). w A vltozk neve nem lehet a Visual Basic nyelvben hasznlt egyik kulcssz sem. Ha a vltoz nevben szeretnnk megjellni, hogy milyen a vltoz adattpusa, akkor rdemes a vltoznv els hrom betjt erre felhasznlni. Ezt az els hrom karaktert prefixnek nevezzk. Ezt az elnevezsi mdot az angol nyelv programozsi szakknyvek magyar mdszerknt emltik. Termszetesen nem ezrt rdemes hasznlni. A prefixszel elltott vltoz hasznlata sok esetben egyszerbb teszi a ksz program olvasst. Egy szveg tpus vltozt pldul rdemes a kvetkezkppen meghatrozni:
Dim strSzoveg As String
Az elnevezs szablyai
A vltozk elnevezsekor figyelembe kell venni a felsorolsban meghatrozott korltozsokat.

Prefix
rdemes, de nem ktelez az eltag karaktereket hasznlni, hogy a program szvegbl kiderljn a vltoz tpusa.

Ha a program olvassa sorn brmikor tallkozunk ezzel a vltozval, tudni fogjuk rla, hogy szveg trolsra alkalmas. Ha a vltoz neve tbb szbl llna, akkor mivel a nvben nem lehet szkz , vagy kezdjnk minden szt nagybetvel, vagy helyettestsk a szkzt alhzs karakterrel. Pldul:

51

Visual Basic for Application

2. rsz

Dim strDolgozoVezetekNeve As String

vagy alhzssal
Dim strDolgozo_vezetek_neve As String

Ezek persze csak ajnlsok, de valban tmogatjk a program olvashatsgt.

A deklarls
A vltozk deklarlsnak helyfoglalsnak kt mdja is van. Az egyik esetben a program valamelyik rszben rtket adunk egy vltoznak. Vagyis nem hatrozzuk meg elre a helyt s tpust, hanem egyszeren csak hasznlatba vesszk. Ezt implicit deklarcinak nevezzk. A msik esetben a program vagy eljrs elejn elre lefoglaljuk a vltozk helyt s tpust. Ezt explicit deklarcinak hvjuk.

Implicit deklarci
Nzzk meg elbb ezt a mdszert, vonjuk le belle a szksges tanulsgot, majd ismerkedjnk meg az explicit deklarlssal. Egyszernek tnik, hogy egyszer csak elkezdnk hasznlni egy vltozt, amikor arra szksg van. Ilyenkor a program futs kzben foglal helyet a vltoznak. Egyszer, de nem biztonsgos! Nzzk meg, me:
Sub ErtekBekerese() Szm = 18 ... ... Szam = Szam + 1 ???????????? End Sub

Implicit deklarci
A deklarls akkor trtnik, amikor hasznlatba vesszk a vltozt. Gyors mdszer, de sok a hiba lehetsge.

Ebben a kis programban az implicit mdszerrel deklarltuk a vltozkat. A deklarls az rtkadskor automatikusan megtrtnt. Ksbb a program egy msik pontjn ez rendszerint messze van attl a helytl, ahol a vltozt deklarltuk szeretnnk megnvelni a Szm nev vltoznak az rtkt. Igenm, csakhogy elrtuk a vltoz nevt. Nem nagyon, csak ppen az kezet hinyzik az a betrl. Mi fog trtnni, amikor a program vgrehajtja az utastst? Implicit mdon deklarl egy msik vltozt, aminek a neve Szam lesz, s rgtn meg is nveli annak rtkt

52

4. fejezet

Vltozk meghatrozsa

eggyel. Ezeket a hibkat sokig lehet keresglni. Mennyivel egyszerbb lenne a dolgunk, ha a program szlna minden esetben, amikor egy elre nem deklarlt vltozt szeretnnk hasznlni. Ehhez r kell szoknunk az explicit deklarlsra, mert gy utasthatjuk a programot a nem deklarlt vltozk kiszrsre. Programhibk tpusai w A programozs sorn elkvethet hibkat kt csoportba sorolhatjuk. Az egyik esetben a hiba abbl szrmazik, hogy egy parancsot, vagy kulcsszt elrtunk. Ezt gyorsan kijavthatjuk, mert a Visual Basic ezt felfedezi, s amint kilpnk a sorbl, pirosra sznezi a hibs sort. Az ilyen hibkat szintaktikai hibnak nevezzk. A msik hiba, amit a programozs logikjban ejtnk, a szemantikai hiba. Ezt mr nehezebb felismerni, s ennek megkeressben a Visual Basic sem tud segteni. Ezeknek a hibknak a kikszblse hosszas keresglst ignyel. A logikai hibk elkvetsnek egyik leggyakoribb oka az implicit deklarcibl addik.
Szemantikai hiba
A program algoritmusban elkvetett hiba, amit elg nehz megtallni. A hiba oka sok esetben egy elrt vltoznv.

Explicit deklarls
nmagban az explicit deklarls mg nem megolds. Ki kell adnunk egy modul szint parancsot, hogy a VB figyelje a nem deklarlt vltozkat. Ehhez az eljrsokon kvl valahol a modul elejre be kell rnunk az Option Explicit parancsot. Amelyik modulban szerepel ez a sor, ott a program figyelmeztet, ha nem deklarlt vltozt hasznlunk. Ha teht minden modulban krjk a vltozk figyelst, akkor minden modul elejn szerepelnie kell az Option Explicit parancsnak. Ha ez a parancs szerepel a modulban, akkor a Visual Basic, a program lefordtsa kzben, ellenrzi a vltozk nevt. Ha olyan vltozt tall, amelyet korbban nem deklarltunk, akkor lell, hibt jelez s megjelli a hibs sort. Bellthatjuk gyis a Visual Basic-et, hogy minden jonnan ltrehozott modulba automatikusan berja az Option Explicit utastst. Ehhez kapcsoljunk t a VBE-be, s hajtsuk vgre a kvetkez utastst: Tools Option. Megjelenik a bellt prbeszdpanel. Itt lapozzunk az Editor lapra, s kapcsoljuk be a Require Variable Declaration kapcsolt. Ettl kezdve a bekapcsols utn ltrehozott minden j modulban szerepelni fog az Option Explicit utasts. Az elbbi pldnk explicit deklarlssal a kvetkez lesz:
Option Explicit Sub ErtekBekerese() Dim intSzam As Integer intSzam = 18
Explicit deklarlas
A programban elre rgztjk, hogy milyen vltozkat fogunk hasznlni. Ha olyan vltozt hasznlunk, amit elre nem deklarltunk, a Visual Basic figyelmeztet a hibra.

53

Visual Basic for Application


... ... intSzam = intSzam + 1 End Sub

2. rsz

Tltsk be az Excelt, s hozzunk ltre a VBE-ben egy j felhasznli modult. Ebbe rjuk be a fenti kis programot. Prbljunk meg egy nem deklarlt vltozt hasznlni s figyeljk meg a hibajelzst (11. bra). Kattintsunk az zenet OK gombjra. A programunk nem megy tovbb.

11. bra: A hibs deklarls eredmnye a program indtsa utn Megllt, megjellve a hibs eljrst. lltsuk le az eljrsunkat. Ezt a Run Reset parancs vgrehajtsval tehetjk meg. Javtsuk ki a hibt, s indtsuk jra a programot. Nem krlmnyes ez egy kicsit? De igen! Ha az explicit deklarlst hasznljuk, az elrt vltoznevek miatt nem kell hosszasan keresglnnk a program hibit.

Tmbk deklarlsa
Tmb deklarls
Tmb deklarlskor olyan vltozt hatrozunk meg, amelyben tbb rtket is trolhatunk.

Egy tmbben tbb rtket trolhatunk ugyanazzal az elnevezssel. Ezzel mr tallkozhattunk az alapismeretek olvassakor. Az iskolban is hasznltunk mr tmb vltozkat, amikor egy vltoz mell indexet rtunk (pldul X1, X2, X3 ...). A tmb ugyanezt a clt szolgja a programban. Persze az index lehet sszetett is vagy msknt: tbb dimenzis (pldul:

54

4. fejezet

Vltozk meghatrozsa

X1,1, X1,2, X2,1, X2,2 ....). A tmb deklarlsra a kvetkez utastst hasznljuk:
Dim intSzam(4) As Integer Dim strNevek(10) As String Dim intSzam_2(4,4) As Integer

A vltoz neve mg zrjelek kz berjuk, hogy mekkora legyen a tmb. Ha vesszvel elvlasztva tbb szmot is egyms mell runk, akkor tbb dimenzis tmbt deklarltunk. Ilyen a plda harmadik sora! Hny eleme lesz a tmbnek? Ez attl fgg, hogy honnan kezddik a tmbelemek szmozsa. Ha nulltl kezddik, ez az alaprtelmezett, akkor mindig eggyel tbb, mint amekkora szmot a zrjelek kz rtunk, mert az elemek kztt a nulls is szerepelni fog. Ha szksges, akkor vltoztathatunk ezen. Hasonlan az Option Explicit utastshoz, a modulba, az eljrsokon kvlre rjuk be az Option Base 1 utastst. Ettl kezdve a tmb legkisebb eleme nem a nulladik elem lesz, hanem az egyes. Ha nem rjuk be az Option Base 1 utastst, vagy Option Base 0-t runk be, akkor a modulban a tmbk els eleme a nulladik lesz. A tmb elemeinek gy adhatunk rtket, hogy lerjuk a vltoz nevt s a mgtte ll zrjelek kz berjuk a tmbelem szmt. me egy plda:
Option Explicit Option Base 1 Sub Nevek() Dim strNevek(3) As String strNevek(1) = "Kiss" strNevek(2) = "Nagy" strNevek(3) = "Vass" End Sub

A kezd elem szma


A tmbvltoz kezd eleme lehet nulla vagy egy. A modulba rt Option Base sorral bellthatjuk.

CD mellklet 04 Fejezet
Tomb deklaralasa.xls

Tmbk deklarlsa esetn magunk is meghatrozhatjuk, hogy melyik legyen a tmb legkisebb szm eleme. Ezt a kvetkez szintaktikval rhatjuk a programba:
Dim Tomb_1(3 To 10) Dim Tomb_2(8 To 12) Dim Tomb_3(-5 To 30)

Az els s az utols elem szma


A vltoz zrjelei kztt meghatrozhatj u, hogy az adott tmbnek melyik legyen az els s az utols elemszma.

A tmbben trolt adatok feldolgozsrl mg szt ejtnk az Itercis parancsok lersa sorn.

55

Visual Basic for Application

2. rsz

Dinamikus tmbk
Dinamikus tmb
Dinamikus tmbrl akkor beszlnk, amikor a tmb jellemzit csak a futs kzben hatrozzuk meg.

Elfordulhat olyan feladat is, amikor a program rsakor mg nem tudjuk, hny elem tmbre lesz szksgnk a program futtatsakor. Ha pldul szeretnnk egy tmbben trolni egy munkafzet lapjainak a nevt, nem tudhatjuk elre, hogy hny munkalapja lesz az pp feldolgozs alatt ll munkafzetnek. Ebben az esetben a program futsa kzben kell megadnunk az elemek szmt, hogy se tbbet, se kevesebbet ne foglaljunk a szksgesnl. Ilyenkor dinamikus tmbt hozunk ltre. Ha tmb deklarlsakor resen hagyjuk a vltoz neve mgtti zrjelprt, akkor dinamikus tmbt deklarltunk.
Dim strLapokNeve() As String

A dinamikus tmb elemei


A dinamikus tmb elemeinek a szmt a program futsa kzben a ReDim paranccsal adjuk meg.

Mikor hatrozzuk meg az elemek szmt? Mindenkppen azeltt, mieltt hasznlatba vennnk, de mr a program futsa kzben! Erre val a ReDim utasts! Tegyk fel, hogy eljutottunk a programnak ahhoz a rszhez, ahol felhasznlnnk az elbb deklarlt vltozt. A kvetkez kis programrszlet szemllteti a dinamikus tmb elemszmnak megadst:
Dim strLapokNeve() As String Dim intLapSzam As Integer strLapSzam = Worksheets.Count ReDim strLapokNeve(intLapSzam)

Mi trtnt a kis programunkban? Deklarltuk a vltozinkat. A kvetkez lpsben, Sheets.Count paranccsal megszmoltuk az aktv munkafzet lapjait. Az eredmnyt futs kzben felhasznltuk a tmb elemszmnak meghatrozsra. A program tovbbi rszben rtket adhatunk a tmb elemeinek. Ugyangy jrhatnnk el a megnyitott munkafzetek neveinek meghatrozsval is. Ahnyszor kiadjuk a ReDim utastst, jbl helyet foglalunk a tmb elemeinek. Ez egyben azt is jelenti, hogy megszntetjk az elz deklarlst, s jbl helyet foglalunk a tmbnek. Ebben az esetben az adatokat elvesztjk. Ha a ReDim utastssal csak nvelni szeretnnk a tmb elemeinek szmt a korbbi tartalom megtartsval , akkor a Preserve kulcsszt is be kell rnunk a kvetkezkppen:
ReDim Preserve strLapokNeve(intLapSzam)

gy a tmb korbbi elemei megmaradnak, feltve, ha nem kisebbre vettk a tmbt. A korbban trolt rtkeke megmaradnak, csak azok vesznek el, amelyeket a rvidts miatt elhagytunk.

56

4. fejezet

Vltozk meghatrozsa

sszefoglalva
A vltozknak deklarlssal foglalhatunk helyet az operatv memriban. A ktfle deklarlsi mdszer kzl hasznosabb az explicit deklarci hasznlata. E ltszlag nehzkesebb mdszer sok szemantikai, logikai hiba elkvetsben akadlyozhat meg minket. A vltozk deklarlsa sorn mi hatrozhatjuk meg a vltozk nevt s tpust. A nvvlasztsnl gyeljnk a fejezetben lert szablyokra. Sokat segthetnk a program ksbbi olvashatsgn, ha eltagokat hasznlunk.

57

5. fejezet

Specilis vltozk

bben a fejezetben nhny rdekes adattrolsi mdszerrl olvashatunk. Olyanokrl, amelyek kicsit eltrnek az elz fejezetben olvasottaktl. Ezek kz tartoznak az objektum tpus vltozk, a felhasznli gyjtemnyek s adattpusok. Kicsit ms a kezelsk, kicsit ms clt szolglnak. Az objektum tpus vltoz pldul nem arra szolgl, hogy egy objektumot troljunk benne, hanem arra, hogy elnevezznk vele egy objektumot. A felhasznli gyjtemnyt hasznlhatjuk tmbvltozk helyett. Ez a lehetsg kicsit sszetettebb, de j lehetsgeket knl a programozs sorn. A felhasznli adattpus segtsgvel j rekord szervezs vltoztpust hozhatunk ltre. Tegyk fel teht a kvetkez krdseket: w w w w Mirt ms az objektum vltozk hasznlata? Hogyan hozhatunk ltre egyedi gyjtemnyeket? Mire hasznlhatjuk az egyedi gyjtemnyeket? Mi a feladata a felhasznli vltoztpusnak?

Objektumok elnevezse
Megtanultuk, hogy a vltozk olyan memriaterletek, melyekben klnfle rtkeket trolunk. Az objektum tpus vltozk esetn nem errl van sz. A Visual Basic nem msolja az egsz objektumot a lefoglalt helyre, csak az objektumra mutat hivatkozst. gy az objektum tpus vltozkat arra hasznljuk, hogy rmutassunk egy objektumra. A vltoz deklarlsban mg nincs klnbsg, de az rtkads eltr a megszokottl. Induljunk ki eddigi ismereteinkbl! Tegyk fel, hogy egy nem aktv munkafzet a neve legyen Munkafzet1 els munkalapjn tallhat A1-es cellba szeretnnk berni valamilyen adatot. Legyen ez a jl bevlt Excel sz. Ehhez le kell rnunk az objektumdiagram szerinti helyes elrsi tvonalat. A parancs a kvetkez lesz:
Objektum tpus vltoz
Az objektum tpus vltozkat az objektumok elnevezsre hasznljuk. Az elnevezshez a Set kulcsszt kell hasznlnunk.

59

Visual Basic for Application


Workbooks("Munkafzet1").Worksheets("Munka1").Range("A1") =

2. rsz
("Excel")

Ha ezzel a tartomnnyal, cellval tbb mveletet is el kellene vgeznnk, akkor az egyenlsgjel eltti szveget tbbszr is le kne rnunk. Ez hossz, s eltveszthet. Ilyenkor rdemes ltrehozni egy objektum tpus vltozt s rvidebb nvvel elltni a kiszemelt cellt. Ezt a kvetkez mdon tehetjk:
Dim objA1 As Object Set objA1 =

Workbooks("Munkafzet1").Worksheets("Munka1").Range("A1")

Vegyk szre a Set kulcsszt! Ez egy lnyeges eltrs a korbbi rtkad utastsokhoz kpest. Igaz, hogy ez gy kt programsort eredmnyezett, de cserbe ezek utn az gy ltrehozott nvvel hivatkozhatunk a Munkafzet1 munkafzet els munkalapjn tallhat A1-es cellra. A lervidtett hivatkozst gy hasznlhatjuk:
objA1 = "Excel"

Az Object tpus helyett hasznlhattunk volna Variant adattpust is. Ez ugyanis alkalmas objektum elnevezsre is. Ha a vltoztpus Object, akkor ezzel a nvvel brmilyen objektumtpust elnevezhetnk. Ha elre tudjuk, hogy milyen objektumot szeretnnk elnevezni, akkor ezt mr a deklarci sorn is meghatrozhatjuk. Pldul hasznlhattunk volna olyan deklarcit, hogy:
Dim rngA1 As Range

Mi a klnbsg a kt deklarci kztt? Ha Object vagy Variant adattpust hasznlunk, akkor a Visual Basic nem tudja, milyen objektumot fogunk elnevezni. Ennek megfelelen azt sem tudja elre, hogy az elnevezett objektumnak milyen tulajdonsgai, metdusai lesznek. Ez azrt fontos, mert az elnevezs szmra le kell foglalni az elnevezett objektum tulajdonsgainak helyt a memriban. Ez rtkadskor, vagyis a Set parancs vgrehajtsakor trtnik meg. Ahnyszor elneveznk vele egy tartomnyt, minden esetben helyet foglal a tulajdonsgok trolsra. Ettl a programunk egy kicsit lassbb lesz. Ha deklarlskor meghatrozzuk az objektum tpust ahogy ezt a msodik deklarlskor tettk , akkor a Visual Basic mr itt lefoglalja a szksges memriaterletet. Ezt elegend egyszer megtenni, vagyis nem futs kzben alaktja ki a tulajdonsgok helyt. Ettl a program gyorsabban fog futni. Ms szval, ha csak tehetjk, deklarlskor hatrozzuk meg a vltoz objektumtpust.

60

5. fejezet

Specilis vltozk

Tmbk helyett gyjtemnyek


A Visual Basic-ben van egy Collection, gyjtemny osztly. Ennek segtsgvel ltrehozhatjuk sajt gyjtemnyeinket. A ltrehozott gyjtemny elemeiben brmit trolhatunk. Mg az sem elrs, hogy azonos adattpus rtkeket helyezznk el bennk. A gyjtemnyeknek t alapvet mvelete van. Ezeket szinte mindegyik gyjtemnynl megtalljuk. Ezek a kvetkezk: w A Count tulajdonsgbl megtudhatjuk, hogy hny eleme van a gyjtemnynek. w Az Add metdussal j elemet vehetnk fel a gyjtemnybe. w A Remove metdust hasznlva eltvolthatjuk a gyjtemny egy feleslegess vlt elemt. w Az Item metdus segtsgvel a gyjtemny egy elemre hivatkozhatunk. w A For Each... Next ciklusszervezssel vgiglpkedhetnk a gyjtemny sszes elemn. Errl a ciklusszervezsrl szl rszben rszletesen olvashatunk.
Gyjtemnyek
A tmb tpus vltozk helyett hasznlhatunk gyjtemnyeket. Ezek rugalmasabb kezelst tesznek lehetv.

Objektum-elforduls ltrehozsa
A Collection egy objektumosztly. Ebbl ltre kell hoznunk egy objektum-elfordulst. Erre a kvetkez parancsokat hasznljuk:
Dim colEgyedi As Collection Set colEgyedi = New Collection

j objektum ltrehozsa
j objektumot a New kulcsszval hozhatunk ltre.

Az els parancssor mg csak egy objektum tpus vltoz, amit majd arra hasznlunk, hogy elnevezzk vele az j Collection objektum-elfordulst. Ekkor hozzuk ltre az elfordulst. Erre a Set kulcsszt fogjuk hasznlni. A msodik sorban mr ltrehoztuk a colEgyedi objektum-elfordulst. Hasznlatba is vehetjk. Mieltt azonban ezt megtennnk, ismerkedjnk meg egy rvidebb rsmddal is. Az objektum-elfordulst ltrehozhatjuk kzvetlenl a deklarl parancsban is. Ez egyszersti a program rst.
Dim colEgyedi As New Collection

Az itt lert deklarl utasts eredmnye ugyazaz lesz, mint az elz kt parancs eredmnye.

61

Visual Basic for Application


j elem felvtele a gyjtemnybe
A gyjtemny elemeinek szmt az Add metdussal bvthetjk.

2. rsz

A gyjtemny bvtse
A ltrehozott j objektum-elfordulsban trolhatunk szveget, szmot, hivatkozhatunk objektumokra. Akr mg gy is, hogy az egyik elemben objektum-hivatkozs van, a msikban pedig egy szveg vagy egy szm. Erre viszonylag ritkn van szksg, ltalban azonos adattpusokat trolunk ebben is. Nzzk meg, hogyan lehet felvenni j elemet a gyjtemnybe. Hasznljuk az Add metdust!
Sub Dolgozok() Dim colEgyedi As New Collection colEgyedi.Add "Kiss", "Fonok" colEgyedi.Add "Nagy", "Helyettes" colEgyedi.Add "Vass", "Titkar" colEgyedi.Add "Ksa", "Eloado_1" colEgyedi.Add "Ss", "Eloado_2" MsgBox colEgyedi(2) End Sub

CD mellklet 05 fejezet
Gyujtemeny.xls

A pldt megtalljuk a CD mellkleten. Tltsk be! Indtsuk el a VBE-t s nyissuk ki a Gyujtemeny nev ltalnos modult. Vegyk szemgyre az eljrs parancsait. Az els sorban ltrehoztuk a colEgyedi objektum-elfordulst.

12. bra: A Visual Basic felknlja a metdus paramtereit A kvetkez t sorban ugyanazt a mveletet hajtjuk vgre. j elemeket vesznk fel a gyjtemnybe. Hogy mi kerljn a gyjtemnybe s hova, az Add metdus paramtereivel hatrozzuk meg. Ebben segt a Visual

62

5. fejezet

Specilis vltozk

Basic. Amint letjk a szkzt az Add metdus utn, megjelenik a paramterek felsorolsa (12. bra). Nzzk meg, hogy melyik paramternek mi a feladata. w Az Item helyre kell bernunk azt az rtket, amit trolni szeretnnk a gyjtemny adott elemben. w A Key paramter egy szveg tpus adatot vr. Ezzel az rtkkel hivatkozhatunk majd a gyjtemny most felvett elemre. A kulcsba rt rtk nem ismtldhet. w A Before paramterrel hatrozhatjuk meg azt, hogy a gyjtemny j eleme melyik mr korban felvett elem el kerljn a sorban. Ha nem tltjk ki, akkor a lista vgre kerl az j elem. w Az After paramterrel azt hatrozhatjuk meg, hogy az j elem melyik mr korban felvett elem mg kerljn a sorban. Nem ktelez kitlteni, ilyenkor a program az utols elem utn teszi az j elemet.
MsgBox colEgyedi(2)

Az utols sor kirja az ltalunk meghatrozott elem tartalmt. Ez a mi esetnkben a msodiknak felvett elem lesz. A gyjtemny elemeire hivatkozhatunk a nevkkel is. Ezrt hatroztuk meg a Key paramtert is. Ha pldul szeretnnk tudni a fnk nevt, nem kell tudnunk hogy hnyadik a sorban, hanem hivatkozhatunk r nvvel az albbi mdon:
MsgBox colEgyedi("Fonok")

Elem eltvoltsa
Ha a gyjtemny egyik elemre mr nincs szksgnk, akkor azt a Remove metdussal eltvolthatjuk. Ezt a kvetkez kis eljrsban mutatjuk be, ahol felhasznljuk a Count tulajdonsgot is:
Sub DolgKilep() Dim colEgyedi As New Collection colEgyedi.Add "Kiss", "Fonok" colEgyedi.Add "Nagy", "Helyettes" colEgyedi.Add "Vass", "Titkar" colEgyedi.Add "Ksa", "Eloado_1" colEgyedi.Add "Ss", "Eloado_2" MsgBox colEgyedi.Count colEgyedi.Remove "Titkar" MsgBox colEgyedi.Count End Sub
Elem eltvoltsa a gyjtemnybl
A gyjtemny Remove metdusval eltvolthatjuk a gyjtemny feleslegess vlt elemeit.

CD mellklet 05 fejezet
Gyujtemeny.xls

63

Visual Basic for Application

2. rsz

Az eljrs eleje egyezik az elzvel, mindaddig, amg felvesszk a gyjtemny elemeit. A kvetkez sorban megszmoljuk az elemeket. Ezutn a Remove metdussal eltvoltunk egy elemet, majd ismt megszmoljuk, hogy mennyi maradt. A pldban a titkr adatt tvoltottuk el. Termszetesen most is hivatkozhattunk volna sorszmmal is. Ezt gy kellett volna bernunk a programba:
colEgyedi.Remove 3

Ezzel a gyjtemny harmadikknt felvett elemt tvoltottuk volna el.

rtk megvltoztatsa
rtk mdostsa
Az objektumelemben trolt rtkeket csak gy mdosthatjuk, hogy elbb kivesszk a gyjtemnybl a mdostand rtket, majd a helyre j rtket tesznk.

Ha a gyjtemny egy elemnek az rtkt szeretnnk megvltoztatni, akkor ezt csak gy tehetjk meg, hogy elbb eltvoltjuk a felesleges elemet, s ismt felvesszk. Az j elem kulcsa, Key ugyanaz legyen, mint az eltvoltott. Teht, ha j titkr lp be a cghez, a neve legye mondjuk Kovcs , akkor ezt gy cserlhetjk le:
Sub DolgCsere() Dim colEgyedi As New Collection colEgyedi.Add "Kiss", "Fonok" colEgyedi.Add "Nagy", "Helyettes" colEgyedi.Add "Vass", "Titkar" colEgyedi.Add "Ksa", "Eloado_1" colEgyedi.Add "Ss", "Eloado_2" MsgBox colEgyedi("Titkar") colEgyedi.Remove "Titkar" colEgyedi.Add "Kovcs", "Titkar" MsgBox colEgyedi("Titkar") End Sub

CD mellklet 05 fejezet
Gyujtemeny.xls

A tmbvltozkkal ellenttben itt nem csak az indexekkel hivatkozhatunk egy elemre, hanem az j elem felvtelnl megadott kulccsal is. A kulcsok nem ismtldhetnek, egyedinek kell lennik.

Felhasznli adattpus hasznlata


A felhasznli adattpussal kialakthatjuk egyni adatstruktrinkat. A felhasznli adattpust nevezik rekord tpus vltoznak is, ami arra utal, hogy egy meghatrozott vltoztpus tbb vltozt is magban fog-

64

5. fejezet

Specilis vltozk
Felhasznli tpus
A felhasznli vltoztpust elbb a Type End Type utastsprral meg kell hatroznunk.

lalhat. Ennek nagy hasznt vehetjk a listba szerkesztett adatok feldolgozsnl, vagy az Access programozsakor. A felhasznli adattpus meghatrozst a Type s End Type sorok kz kell rnunk. A kt utasts kztt csak deklarl utastsok lehetnek. Nzznk egy pldt:
Type Dolgozok VezNev As String * 30 KerNev As String * 20 SzulDat as Date Belep as Date End Type

CD mellklet 05 Fejezet
Rekord tipus.xls

A fenti utastsokat a modul eljrsain kvlre kell rni. Az eredmny az lesz, hogy ltrejn egy j vltoztpus, amibe tbbfle adatot trolhatunk. Nzzk meg a felhasznli tpus hasznlatt:

Deklarls
A meghatrozott felhasznli tpussal j vltozkat deklarlhatunk.

13. bra: A felhasznli tpus bels vltozi megjelennek


Sub DolgAdat() Dim Alkalm As Dolgozok Alkalm.VezNev = "Kiss" Alkalm.KerNev = "Bla"

CD mellklet 05 Fejezet
Rekord tipus.xls

65

Visual Basic for Application


Alkalm.Belep = #1/1/2003# Alkalm.SzulDat = #4/14/1952# End Sub

2. rsz

Az els sorban deklarlunk egy vltozt az jonnan ltrehozott vltoztpussal. A kvetkez sorokban rtket adunk a tpusban meghatrozott bels vltozknak. Ezt ugyangy tehetjk meg, mintha egy objektum tulajdonsgai lennnek. A program rsakor a Visual Basic felknlja a bels vltozk neveit, amint letjk a pont opertort. Ezt szemllteti a 13. bra.

sszefoglals
Ha a program objektum-hivatkozsait szeretnnk lervidteni, akkor hozzunk ltre objektum tpus vltozt. Hacsak tehetjk, a deklarl parancsban pontosan hatrozzuk meg az elnevezni kvnt objektum tpust. gy gyorsthatunk a program futsn. Az rtkadskor ne felejtkezznk meg a Set kulcsszrl. Fontos megjegyezni, hogy az objektum nem kerl vele a vltozba, csak elnevezzk az objektumot! Objektum tpus vltozt hasznlunk akkor is, amikor egy j objektumot szeretnnk ltrehozni. Ezt lttuk gyakorlatban a gyjtemny hasznlatrl szl bekezdsekben. A gyjtemny objektum-osztly alapjn ltrehozott objektum-elforduls hasznlatval kivlthatjuk a tmbvltozkat. A gyjtemnyek tbb lehetsget biztostanak a program rsa sorn. Rugalmasabban kezelhet, mint a tmbvltoz. A felhasznli adattpus egyedi, rekord szerkezet adatfeldolgozsra hasznlhat. Az sszetartoz vltozkat egybe zrhatjuk, mintha csak egy objektum tulajdonsgai lennnek.

66

6. fejezet

llandk, felsorolsok

ok esetben olyan rtkekkel dolgozunk, amelyeket a program futsa kzben egyszer sem vltoztatunk meg. Ezeket llandknt troljuk. Ha pldul, egy hibazenetet kldnk a felhasznlnak, akkor minden esetben ugyanannak a szvegnek kell megjelennie, ha az adott hiba bekvetkezik. Nem csak hibazenetekkel jrhatunk el gy. Gondoljunk csak pldul a kereskedelemben hasznlt fa rtkre vagy ms rtkekre, amik nem vltoznak. A programban hasznlt llandkat gyis megadhatjuk, hogy deklarlunk egy vltozt s rgtn utna rtket adunk a deklarlt vltoznak. Ezt egy lpsben lland deklarlsval valsthatjuk meg. A krdsek a kvetkezk: w w w w Hogyan kell deklarlni az llandkat? Mi a szerepk a programban? Mi a felsorols? Mire hasznlhat a felsorols?

llandk deklarlsa
Az llandk deklarlsnak kulcsszava a Const. A kvetkez pldban egy szveges llandt deklarlunk, amit hibazenetknt fogunk megjelenteni a programban.
Const STR_UZENET = "Nincs ilyen munkalap!"
lland deklarlsa
Az llandk deklarlsnak a kulcsszava a Const. Deklarlsakor meghatrozzuk annak adattpust s az rtkt.

Az lland deklarlsa magba foglalja az adattpus meghatrozst s az rtkadst. Mivel a fenti pldban az adattpust nem rtuk le, az lland Variant adattpus lesz. Ez tbb helyet foglal, mintha meghatroznnk a valdi tpust. A kvetkez utastssorban meghatrozzuk az lland adattpust is.

67

Visual Basic for Application


Const INT_LEPESEK As Integer = 17

2. rsz

A vltozk nevt rdemes vgig nagybetkkel rni, hogy a programban knnyen rtalljunk az esetleges bvtsek, javtsok alkalmval. A cl teht ismt az ttekinthetsg, a knnyebb olvashatsg.

Felsorolsok
A felsorols megrtshez vizsgljuk meg az MsgBox utastst. Ez az utasts zenetek megjelentsre szolgl. A pldban rgtn alkalmazzuk a tanultakat, s az zenet szvegt llandknt hatrozzuk meg. Az utasts bersakor figyeljnk magra a bersra. Tltsk be az Excel-t, s trjnk t a Visual Basic Editor-ba. Hozzunk ltre egy j modult, s rjuk be a kvetkez eljrst:
CD mellklet 06 Fejezet
Felsorolasok.xls

Sub UzenetPanel() Const STR_UZENET As String = "zenet panel megjelentse" Const STR_CIMKE As String = "zenet" MsgBox STR_UZENET, vbCritical, STR_CIMKE End Sub

Az eljrs els kt sorban azokat az llandkat deklarltuk, amelyeket az zenet panelben fogunk hasznlni. Az STR_UZENET llandban a panelen megjelen zenet szvegt deklarltuk, az STR_CIMKE llandban pedig a megjelen panel cmsornak feliratt. Amint bertuk az eljrst, indtsuk is el! Ehhez lljunk az eljrs valamelyik sorra s hajtsuk vgre a Run Run Sub/UserForm utastst. Megjelenik az zenetnk. A futtats eredmnyt a 14. bra mutatja

14. bra: zenet panel megjelentse

68

6. fejezet

llandk, felsorolsok

15. bra: A Visual Basic bels llandkat hasznl paramterezsre Ha elg figyelmesek voltunk az eljrs bersakor, szrevehettk, hogy a MsgBox parancs bersakor a msodik argumentumnl megjelent egy lista (15. bra). Innen vlaszthattuk ki, hogy a megjelen zenet mit tartalmazzon. gy helyezhetnk el figyelmeztet ikont vagy hiba ikont a megjelen panelen. A listban szvegeket tallunk. A megjelen szvegek mindegyike mgtt egy szm, egy lland van. gy is megrhattuk volna ezt az eljrst, hogy a szvegek mgtti szmot rjuk be a msodik paramter helyre. Ez is j megolds, de a szmokat sokkal nehezebb megjegyezni. Ezrt jelenik meg szvegknt a msodik paramter. Ha a vbCritical szveg helyre azt rnnk, hogy vbInformation, akkor nem a piros kr jelent volna meg az rlap bal szln, hanem egy kk i bet. Nos ezt a pldt azrt oldottuk meg, hogy feltehessk a krdst. Mi is ltrehozhatnnk ilyen felsorolsokat? Mi is meghatrozhatnnk, hogy egy szveg mgtt milyen szmot rtelmezzen a program? Igen! Mi is ltrehozhatunk ilyen felsorolst. Nzzk meg hogyan! A felsorolst deklarlnunk kell. A felsorols elemeinek rtke csak egsz szm lehet. A felsorolst az Enum s az End Enum utastspr kztt kell meghatroznunk gy, ahogy ez a kvetkez pldban olvashat:
Enum HetNap hetfo kedd szerda csutortok pentek szombat vasarnap End Enum
A Visual Basic felsorolsai
A Visual Basic-ben s az Office objektumokban a szmokat felsorolsokban megadott rtkek helyettestik. gy knnyebb megjegyezni azokat.

A felsorols deklarlsa
A felsorols deklrlsa az Enum.. End Enum utastsprt hasznljuk. Ezzel j vltoz tpust hozhatunk ltre. A felsorols nevt az Enum sorba rjuk!

69

Visual Basic for Application

2. rsz

A felsorols elemei
A felasorols elemeinek, megadhatjuk az rtkt, de ezek csak egsz szmok lehetnek.

A felsorols meghatrozst eljrson kvlre, a modul elejre kell rnunk. A felsorolsba bert szvegek gy viselkednek, mint egy konstans. A felsorolt elemek rtke nulltl kezddik, s minden elem rtke eggyel nvekszik. Vagyis a vasarnap rtke hat. Mi is meghatrozhatjuk az Enum elemeinek rtkt. Ehhez a felsorolt szvegek mg egyenlsgjelet runk, majd egy egsz szmot. Ezt szemllteti a kvetkez meghatrozs:
Enum HetNap_2 hetfo = 1 kedd = 2 szerda = 3 csutortok = 4 pentek = 5 szombat = 6 vasarnap = -1287 End Enum

CD mellklet 06 Fejezet
Felsorolasok.xls

A felsorolsok hasznlata
Hogyan hasznljuk?
Ha a felsorolst szeretnnk hasznlatba venni, deklarljunk vltozt a nevvel.

A konstansok kiprblsra szolgl modult bvtsk ki egy pldval, melyben kiprbljuk a felsorols hasznlatt. Deklarljunk egy felsorolst, majd egy eljrsban vegyk hasznlatba. Ennek a lpseit mutatja be a 16. bra, amelyek a kvetkezk: 1. Hatrozzuk meg a felsorolst! Most, mi adjunk rtket a felsorols elemeinek a 16. bra szerint. 2. Hozzunk ltre egy eljrst ez az brn az EnumTeszt. Deklarljuk benne a Napok vltozt. 3. A vltoz tpusa legyen ugyanaz, mint a felsorols neve. Vegyk szre, hogy a tpus megjelenik a listban. Akr innen is kivlaszthatjuk. 4. Adjunk rtket a Neve vltoznak. Amint lerjuk az egyenlsgjelet, rgtn megjelennek azok a szvegek, amelyeket a felsorols meghatrozsakor rtunk az Enum s az End Enum sorok kz. Itt nem abban a sorrendben jelennek meg, ahogy mi rtuk be, hanem bc szerint rendezve. Az brn a pnteki napot vlasztottuk ki. 5. Az utols parancs segtsgvel jelentsk meg a vltoz tartalmt. A kis panel a program futtatsakor lthat lesz! Figyeljk meg, hogy a 16. bra negyedik lpsben a VBE ugyangy felknlja a felsorols elemeit, mint a 15. brn amikor a MsgBox utastst hasznltuk. Mg a lista elejn megjelen brk is azonosak az ott ltottakkal, a felsorols elemei ott is egy egsz szmot kpviselnek.

70

6. fejezet

llandk, felsorolsok
CD mellklet 06 Fejezet
Felsorolasok.xls

16. bra: A felsorols hasznlata Az elkszlt programot gy indthatjuk el, hogy bellunk az elkszlt eljrsba s vgrehajtjuk a VBE Run Run Sub/UserForm utastst. Ennek hatsra jelenik meg az tdik lpsben bert MsgBox utasts eredmnye. A megjelen panelen a pnteknek megfelel 5-s szmot ltjuk.

sszefoglals
Azokat az rtkeket, amelyeket nem fogunk megvltoztatni a program futsi idejben llandkknt deklarljuk. Az lland deklarls kulcsszava a Const sz. Az lland deklarlskor meghatrozhatjuk annak adattpust is. Ez nem ktelez, de a kisebb helyfoglals mgis indokolja. Programjainkban meghatrozhatunk olyan felsorolsokat, melyek megknnytik a munkt. A felsorolsokban az ltalunk meghatrozott szvegek mg egsz szmokat rendelhetnk. gy nem kell megjegyeznnk azt, hogy milyen szmrtket vr a program.

71

7. fejezet

Hatkr, lettartam

vltozkat s llandkat valamilyen eszkzzel el kell vlasztanunk egymstl. Nem lenne j, ha egy adott eljrshoz tartoz vltoznak egy msik eljrs bellthatn az rtkt. A hatkrk hatrai azt is lehetv teszik, hogy tbb eljrsban hasznlhassuk ugyanannak a vltoznak vagy llandnak a nevt. A Visual Basic eljrsokban deklarlt vltoznak csak abban az eljrsban adhatunk rtket, amelyben meghatroztuk. Termszetesen kellenek tgabb hatrok is. Egy modulban dolgozva szksgnk lehet olyan vltozkra is, ami csak abban a modulban rvnyes, amelyben deklarltuk. gy egyben tarthatjuk az sszetartoz eljrsokat, vltozkat s llandkat. Ltezik egy mg nagyobb egysg is: a projekt. A projekt minden moduljban hasznlhat vltozkat globlis vltozknak nevezzk. Ezeknek a vltozknak a projekt sszes moduljban rtket adhatunk, s brmelyikben kiolvashatjuk tartalmukat. Mivel egy Visual Basic projekt tbbfle modult tartalmaz, fontos klnbsget tennnk a modulok tpusai kztt. A vltozk hatkr szempontjbl msknt viselkednek egy osztlymodulban, mint egy ltalnos modulban. A fejezetben a kvetkez krdsekre keressk a vlaszt: w Mitl fgg egy vltoz hatkre? w Hogyan deklarlhatunk eljrs szint vltozkat? w Milyen hatssal van a modul a vltoz hatkrre?

Eljrs szint vltozk


Az eljrs szint vltozknak csak abban az eljrsban vltoztathatjuk meg az rtkt, amelyikben deklarltuk. Tbb eljrsban hasznlhatjuk ugyanazt a vltoz vagy lland nevet. Az azonos nevek nem fognak tkzni egymssal. A hatkr krdst a gyakorlatban vizsgljuk meg! Tltsk be az Excel-t, s a VBE-ben hozzunk ltre egy j modult. rjuk be a kvetkez kt eljrst, s indtsuk el az elst. 73

Visual Basic for Application


CD mellklet 07 Fejezet
Hatokor.xls

2. rsz

Sub Kor_1() Dim strNeve As String strNeve = Kiss End Sub Sub Kor_2() strNeve = Nagy End Sub

Eljrs szint hatkr


Ha egy eljrson bell a Sub s End Sub kztt deklarlunk egy vltozt, akkor azt csak abban az eljrsban hasznlhatjuk, ahol meghatroztuk.

A Kor_1 eljrs hibajelzs nlkl lefut, hiszen a msodik sorban egy eljrs szint vltoznak adunk rtket. Prbljuk elindtani a msodik Kor_2 eljrst! Amint elindtjuk, a program lell, s megjelenik egy hibazenet. Az zenet arrl tjkoztat, hogy olyan vltozt hasznlunk, amit korbban nem deklarltunk. Teht, ha nem ebben az eljrsban deklarljuk a vltozt, akkor azt nem hasznlhatjuk. Kzzelfoghatv vlt, hogy az strNeve vltoz hatkre a Kor_1-es eljrs. lltsuk le az eljrs futst a Run > Reset paranccsal. Termszetesen szksgnk lehet a Kor_2 eljrsban is strNeve vltozra. Akkor azt ott is deklarlnunk kell!

Paramteres eljrs, szubrutin


Paramter
Ha egy eljrs neve mgtti zrjelpr kztt deklarlunk vltozt, akkor az egy olyan eljrs szint vltoz lesz, amelynek az eljrs hvsakor rtket adhatunk.

De mit kell tennnk akkor, ha egy eljrs szint vltoznak egy msik eljrsbl szeretnnk rtket adni? Az eljrs neve mgtti zrjelpr kztt is deklarlhatunk vltozkat. Az eljrs zrjelei kztt deklarlt vltozknak kvlrl is adhatunk rtket, de hasznlhatjuk az eljrson bell is. gy hozhatunk ltre olyan eljrsokat, melyek kls adatokat dolgoznak fel. rjunk egy olyan eljrst, ami kt szmot sszead, majd az eredmnyt kirja egy zenetpanel segtsgvel. gyeljnk az eljrs felptsre, szerkezetre. Kezdjk az eljrsban hasznlt llandk s vltozk meghatrozsval. Zrjuk le az elz plda kedvrt ltrehozott munkafzetet, s nyissunk egy jat az j plda miatt. Hozzunk ltre egy ltalnos modult, s rjuk bele a kvetkez eljrst!
Sub Osszeado(sngSzam_1 As Single, sngSzam_2 As Single) Const STR_EREDMENY As String = "Az szeads eredmnye: " Const STR_CIMKE As String = "sszeads" Dim dblEredmeny As Double dblEredmeny = sngSzam_1 + sngSzam_2 MsgBox STR_EREDMENY & dblEredmeny, vbInformation, STR_CIMKE End Sub

CD mellklet 07 Fejezet
Parameter.xls

Paramteres eljrs indtsa


A paramteres eljrst csak hvssal lehet elindtani.

Ezt az eljrst nem lehet kzvetlen elindtani, csak gy, hogy egy msik eljrsbl meghvjuk. Ennek az oka az, hogy a zrjelek kztt deklarlt vltozknak rtket kell adni, s ezt csak akkor tehetjk meg, amikor

74

7. fejezet

Hatkr, lettartam

meghvjuk az eljrst. rjunk teht egy msik eljrst is. Ebben egyetlen parancs lesz, az amivel meghvjuk az sszead programot. Figyeljk meg, hogy amikor eljutunk a paramterek megadshoz, a Visual Basic megmutatja a paramtereket s azok adattpust.
Sub Szamolas() Osszeado 12, 45 End Sub
CD mellklet 07 Fejezet
Parameter.xls

17. bra: Egy eljrs paramterezse Elemezzk a programot! A Szamolas eljrs meghvja az Osszeado eljrst. Amikor meghvja, rtket ad a kt vltoznak, amit a zrjelek kztt deklarltunk. Teht, amikor az Osszeado eljrs elindul, mr a kt vltozban lesz a meghvskor bert kt szm. Amikor a Visual Basic vgrehajtja a meghvott eljrst, visszatr abba az eljrsba, amelyik meghvta t. Az Osszeado eljrs els kt sorban azokat az llandkat deklarljuk, amelyeket az MsgBox-ban fogunk felhasznlni az eredmny megjelentsre. Az eredmny vltoz adattpusa nem egyezik meg a kt sszeadand szm tpusval. Ennek az oka az, hogy minden eredmnyt trolnunk kell, mrpedig kt szimpla hosszsg Single szm sszege nagyobb is lehet, mint a szimpla hosszsg. Az adatbekrssel nem foglalkozunk, mert az megtrtnt, amikor meghvtuk az eljrst. Az algoritmus szmtsi rsze egyetlen sor, ami a kt szm sszegt berja a dblEredmeny vltozba. Az eljrs adatkirsi rsze egy jabb sor. Ez az MsgBox kezdet. Itt egy ismeretlen mveleti jelet tallunk. Az & karakter egy olyan mveleti jel, amelyik kt kln vltozban tallhat rtket egyms mg r. gy oldottuk meg, hogy az eredmny megjelensekor ne csak egy szm jelenjen meg, hanem egy rvidke szveg is.
Szubrutin
Amikor egy eljrst egy msik eljrsbl meghvva indtjuk el, a meghvott eljrst szubrutinnak nevez-

75

Visual Basic for Application


Paramter rtkads
A paramteres eljrsoknak teszleges sorrenben adhatunk t rtket, ha berjuk a paramter nevt s a kettspont egyenlsgjel utn rjuk az tadni kvnt rtket.

2. rsz

Ejtsnk nhny szt a paramterek megadsrl! A 75. oldal 17. brjn lttuk, hogy megjelennek a meghvott eljrs argumentumai, amikor oda jutunk, hogy meg kell adni. A megjelen srga svon mindig az a paramter jelenik meg flkvr betvel, amelyiknek rtket adunk. Nha knyelmesebb lehet egy eljrs paramtereinek ms sorrendben rtket adni. A Visual Basic erre is lehetsget ad. Amikor pp felknlja az els paramtert a program, akkor mi berhatjuk brmely ms paramter nevt, s kettspont-egyenlsgjellel megadhatjuk a paramter rtkt. Ezt mutatja be a 18. bra:

18. bra: Paramterek megadsa tetszleges sorrendben

Opcionlis paramterek
Opcionlis paramter
Ezek olyan paramterek, amelyeknek nem ktelez megadni az rtkt, amikor az eljrst meghvjuk.

Ha nem az sszes paramtert akarjuk tadni a hvs pillanatban, akkor gynevezett opcionlis nem ktelez paramtert hasznlunk. Ez egy olyan paramter, amelynek az rtkt nem ktelez megadni akkor, amikor meghvjuk az eljrst. A zrjelek kztt elbb a ktelez paramtereket kell felsorolni, majd ezt kveten az opcionlis paramtereket. Ha egyszer a felsorolsban opcionlis paramtert adtunk meg, attl kezdve csak ilyet tartalmazhat a felsorols tbbi rsze. Az opcionlis paramter meghatrozsakor megadhatunk egy rtket, amit alaprtelmezettnek tekint a program. En-

76

7. fejezet

Hatkr, lettartam

nek megadsa nem ktelez. Ezt az rtket akkor veszi fel a paramter, ha az eljrs hvsakor nem adtunk rtket az adott paramternek. Ha nem adjuk meg az opcionlis paramter kezd rtkt, akkor az eljrson bell lekrdezhetjk, hogy kapott-e rtket a vltoz az eljrs emeghvasakor. Erre az Ismissing(Valtozonev) fggvnyt haszlhatjuk. Oldjunk meg egy egyszer pldt. rjunk egy olyan eljrst, ami a szorzs mveletet vgzi el. gy hatrozzuk meg a paramtereket, hogy amikor az eljrs hvsakor nem adunk rtket a szorznak, akkor azt automatikusan tekintse egynek a program.
Sub Szorzas(sngSzorzando As Single, Optional Szorzo = 1) Const STR_EREDMENY As String = "Az szorzs eredmnye: " Const STR_CIMKE As String = "Szorzs" Dim dblEredmeny As Double dblEredmeny = sngSzorzando * Szorzo MsgBox STR_EREDMENY & dblEredmeny, vbInformation, STR_CIMKE End Sub

CD mellklet 07 Fejezet
Parameter.xls

Alaprelmezett rtk
Az opcionlis paramterek esetn megadhatunk egy rtket. Az opcionlis vltoz, akor veszi fel ezt, ha hvskor nem adtunk rtket neki.

Az eljrst hvjuk meg a korbban megrt Szamolas eljrsbl. Mdostsuk a Szamolas eljrst a kvetkezk szerint:
Sub Szamolas_2() Osszeado sngSzam_2:=14, sngSzam_1:=25 Szorzas 45 End Sub

CD mellklet 07 Fejezet
Parameter.xls

Felfedezhetjk, hogy a Szorzas eljrs hvsa sorn a msodik paramtert nem adtuk meg. Ettl mg a meghvott eljrs mkdik, s eggyel megszorozza a Szorzando paramternek tadott rtket.

Tmbparamter deklarlsa
Ha paramterknt tmbt szeretnnk tadni az eljrsnak, akkor ezt is az eljrs neve mgtti zrjelek kztt kell deklarlnunk. A paramter listban szerepelhet tbb vltoz is, de tmbvltoz csak egy! Ezt a lista legutols helyre kell rnunk. A tmbparamter gy mkdik, mint sok opcionlis vltoz. A tmbparamter mkdst tekintve hasonlt a dinamikus tmbkhz. Mindig annyi eleme lesz, ahny elemnek az eljrs hvsakor rtket adtunk. A tmbparamtert tartalmaz eljrs hvsakor nem ktelez egyetlen elemnek sem rtket adni! A vltoz legkisebb eleme mindig a nulls lesz, fggetlenl attl, hogy a modul elejn kiadtuk-e az Option Base 1 parancsot vagy sem! A tmb mrett nem vltoztathatjuk meg a
Tmbparamter
A tmbparamter az eljrsban tmbknt viselkedik, e annyi eleme lesz, amennyinek az eljrs hvsakor rtket adtunk. A tmb legkisebb eleme minden esetben a nulls elem lesz!

77

Visual Basic for Application

2. rsz

tmbparamtert tartalmaz eljrsban sem, de a hvskor megadott brmelyik elem rtkt trhatjuk. Oldjunk meg egy pldt! rjunk egy olyan eljrst, amelyben dolgozk szervezeti egysgt s nevt dolgozzuk fel. Tegyk fel, hogy mindig egy gazdasgi egysget dolgozunk fel, de ott tbb ember is munklkodik. A gazdasgi egysg nevnek tadsra hasznljunk egy szveges tpus paramtert. Tegyk fel, hogy azt nem tudjuk elre, hogy egy adott egysgen bell hnyan s kik dolgoznak. Ezrt a msodik paramter legyen tmb tpus! Az eljrsban rassuk ki a szervezeti egysg nevt, s a neveket tartalmaz tmb legkisebb s legnagyobb elemnek szmt s tartalmt. Az eredmny kirsra hasznljuk az Immediate ablakot. Ide a Debug.Print paranccsal rhatunk ki brmit. Az elkszlt eljrst hvjuk meg, s figyeljk az eredmnyt. A Dolgozok eljrs a kvetkez lesz:
CD mellklet 07 Fejezet
Parameter.xls TombParameter modul

Sub Dolgozok(strSzervezet As String, ParamArray Neve()) 'Az eljrsban hasznlt vltozk deklarlsa Dim lngAlso As Long Dim lngFelso As Long Dim strAlsoErteke As String Dim strFelsoErteke As String 'A feldolgozs adatainak az sszegyjtse Const STR_SZERVEZET As String = "A szervezeti egysg: " Const STR_LEGKISEBB_SZAMA As String = "A legkisebb elem szma: " Const STR_LEGNAGYOBB_SZAMA As String = " A legnagyobb elem szma: " Const STR_LEGKISEBB_ERTEKE As String = " A legkisebb elem tartalma: " Const STR_LEGNAGYOBB_ERTEKE As String = " A legnagyobb elem tartalma: " 'Az adatok feldolgozsa lngAlso = LBound(Neve)'A tmb legkisebb eleme a szma lngFelso = UBound(Neve)' A tmb legnagyobb elem strAlsoErteke = Neve(lngAlso)' A legkisebb elemn rtke strFelsoErteke = Neve(lngFelso)' A tmb legnagyobb elem rtke 'Eredmny kirsa Debug.Print STR_SZERVEZET & strSzervezet Debug.Print STR_LEGKISEBB_SZAMA & lngAlso Debug.Print STR_LEGNAGYOBB_SZAMA & lngFelso Debug.Print STR_LEGKISEBB_ERTEKE & strAlsoErteke Debug.Print STR_LEGNAGYOBB_ERTEKE & strFelsoErteke End Sub

Elemezzk ki az eljrs lpseit! Az els sorban egy megjegyzst tallunk. Ezt nem hajtja vgre a program. A megjegyzst fels vesszvel kell kezdeni, s utna brmit berhatunk. Megjegyzst rhatunk egy parancssor utn is. A megjegyzsek magyarzatul szolglnak a program megrtshez.

78

7. fejezet

Hatkr, lettartam

Az eljrs kvetkez ngy sorban deklarljuk azokat a vltozkat, melyeket ebben az eljrsban hasznlunk. Ezek hatkre ez az eljrs! A konstansok deklarlsa mr az adatgyjtshez tartozik. Ezrt a kvetkez lpsek ezek meghatrozst tartalmazzk. Az adatfeldolgozsi rsz els kt sorban egy-egy Visual Basic fggvnyt hasznlunk. Az LBound fggvny eredmnye a tmb legkisebb elemnek a szma. Ezt a fggvnyt brmelyik tmb esetn hasznlhatjuk. Figyeljk meg, hogy a fggvnyhvs eredmnyt ad! Ezt az eredmnyt az lngAlso vltozban troljuk, a kirsig. Hasonlan jrunk el a tmb legnagyobb elemnek a szmval is, az eredmnyt az lngFelso vltozba rjuk. Itt az UBound fggvnyt hasznljuk. A legkisebb s legnagyobb elem tartalmnak meghatrozshoz mr felhasznlhatjuk a kiszmtott eredmnyt. A feldolgozs harmadik s negyedik sorban, egy-egy vltozban rgztjk a kt tmbelembe rt rtket. Az eredmny kirsa rszben az eredmnyeket kirjuk az Immedate ablakba. Erre szolglnak a Debug.Print kezdet sorok. Ha ez az eljrs ksz, futtassuk le! rjunk egy Dolgozo_hivasa eljrst, amiben meghvjuk a Dolgozok eljrst. Mg mieltt megkezdennk a futtatst, kapcsoljuk be az Immediate ablakot a View Immediate Window paranccsal. me az eljrs:

19. bra: Eredmny kirsa az Immediate ablakba


Sub Dolgozok_hivasa() Dolgozok "Kereskedk", "Vass", "Sass", "Kovcs", "Sos" End Sub

79

Visual Basic for Application

2. rsz

lljunk a Dolgozok_hivasa eljrs egyik sorba s indtsuk el! Futs utn nzzk meg az Immediate ablak tartalmt. Ezt szemllteti a 79. oldal 19. brja. A Dolgozok_hivasa eljrsban vltoztassuk meg a paramterlistt adjunk ms rtkeket , s futtassuk le tbbszr az eljrst, ismerkedjnk a lehetsgekkel.

Modul szint vltozk s llandk


Modul szint deklarls
Modul szint deklarlkor az eljrsokon kvl kell maghatrozni a vltozt vagy llandt.

Modul szint vltozt gy deklarlhatunk, hogy a modul eljrsokon kvli terletre rjuk a parancsot. gy a vltoznak brmelyik eljrsban rtket adhatunk s kiolvashatjuk az rtkt. Taln egy technikai dolgot rdemes megtennnk! A vltoz tpust jell eltag-karaktereket kibvteni egy kis m betvel. Valahogy gy:
Dim mlngNagySzam As Long

Prbljuk ki a modul szint vltoz hasznlatt! Ha a fejezet eddigi feladatait megoldottuk, zrjuk le azt, s kezdjnk egy j munkafzetet. Az j munkafzetben hozzunk ltre tbb ltalnos modult. Az egyik modulban deklarljunk egy modul szint vltozt, majd ezt prbljuk meg hasznlni egy msik modulbl. Bers kzben gy nz ki, mintha minden rendben lenne. Elfogadja az rtkad parancssort, de amint elindtjuk az eljrst, a fordt lelltja, s nem definilt vltoz hibajelzssel lell.
CD mellklet 07 Fejezet
Modul szint.xls

20. bra: A modul szint vltozk hasznlata

80

7. fejezet

Hatkr, lettartam

rjunk egy msik eljrst ugyanabba a modulba, amelyikben a vltozt deklarltuk s abban ugyangy adjunk rtket neki. Indtsuk el! Ez hibtlanul lefut. Vagyis ezt a vltozt abban a modulban hasznlhatjuk, amelyikben meghatroztuk. A hatkr hatra a modul. Ha preczek szeretnnk lenni, akkor a modul szint vltozkat s llandkat a Private kulcsszval kellene kezdeni. Ezt elhagyhatjuk, mert a modul szint vltozk alaprtelmezs szerint csak abban a modulban rvnyesek, amelyben meghatroztuk azokat. A Private kulcsszt csak eljrson kvl adhatjuk ki.
Private mlngNagySzam As Long Private Const MINT_SZAM As Integer = 5
Private kulcssz
Ez a pontos formja a modul szint vltozk, vagy llandk deklarlsnak.

Ezzel egyenrtk a kvetkez kt sor:


Dim mlngNagySzam As Long Const MINT_SZAM As Integer = 5

Projekt szint vltozk s llandk


Ezek az gynevezett globlis vltozk s llandk. A deklarlsukhoz a Public kulcsszt kell hasznlni. Az elz kt vltozt alaktsuk t globlis vltozv. A projekt szint vltozk s llandk eltag karakterei el rjunk g bett. me:
Public glngNagySzam As Long Public Const GINT_SZAM As Integer = 5
Projekt szint deklarls
A projekt szint deklarls kulcsszava a Public. Ezeket a vltozkat a projekt minden eljrsban hasznlhatjuk.

Ezt a vltozt s llandt a projekt brmely moduljnak brmely eljrsban hasznlhatjuk. Hozzunk ltre egy globlis vltozt, s prbljunk meg rtket adni nekik tbb modul eljrsaiban.

A modulok klnbsge
A Visual Basic projektben tbbfle modult hasznlhatunk. Amikor az alapfogalmak rszben megismerkedtnk a Projekt felptsvel, lthattuk, hogy az Excel munkalapjai s a munkafzet mgtt van egy-egy modul. Amikor errl volt sz, emltettk, hogy ezek osztlymodulok. Ez fontos a globlis vltozk deklarlsa szempontjbl. Mshogy fog viselkedni a globlis vltoz egy ltalnos modulban s msknt egy osztlymodulban. Az osztlymodul feladata ugyanis az, hogy bezrja a benne deklarlt vltozkat.
Fontos!
A projekt szint deklarlst mindg egy ltalos modulba rjuk! Az osztlymodulok bezrjk a vltozkat!

81

Visual Basic for Application

2. rsz

Ezt is gy ismerjk meg, ha kiprbljuk! Zrjuk le a korbbi Excel munkafzeteket s hozzunk ltre egy jat. Trjnk t a VBE programba. Most is hozzunk ltre egy ltalnos modult. Ebbe fogjuk megrni azt az eljrst, melyben rtket adunk a globlis vltoznak. A megoldst a 21. bra szemllteti.

21. bra: Globlis vltoz az osztlymodulban 1. A project ablakban kattintsunk kettt a Munka1 munkalap ikonjra. 2. Megnylik a munkalaphoz tartoz osztlymodul. 3. A megnyitott modulban deklarljunk egy globlis vltozt. A vltoz neve legyen gcurBevetel, tpusa pedig Currency. 4. Hozzunk ltre egy ltalnos modult. Nyissuk meg!

82

7. fejezet

Hatkr, lettartam

5. rjuk bele az brn lthat eljrst! 6. lljunk az eljrsba s a Run Run Sub/User Form parancs vgrehajtsval indtsuk el az eljrst. 7. Az eljrs nem deklarlt vltoz hibajelzssel lell. Mi lehet az oka a bekvetkezett fordtsi hibnak? Az, hogy a globlis vltozt egy osztlymodulban deklarltuk. Az osztlymodul ugyanis magba zrja a benne deklarlt vltozkat. Ezeknek kvlrl msik modulbl csak az objektum-interfszen keresztl adhatunk rtket. Ezt is prbljuk ki! Vltoztassuk meg az ltalnos modul eljrst a kvetkez mdon:
Sub Szamla() Worksheets(1).gcurBevetel = 180000 End Sub

Ismt indtsuk el az eljrst! Most mr hiba nlkl lefut. Az osztlymodulban deklarlt globlis vltoz gy fog viselkedni, mintha a munkalapnak egy jabb tulajdonsga lenne az ltalunk deklarlt vltoz. Fontos teht megjegyeznnk, hogy az Excel objektumaihoz tartoz modulok osztlymodulok. Ha ezek moduljaiban globlis vltozt deklarlunk, akkor azok j tulajdonsgai lesznek az adott objektumnak. Ehhez a tulajdonsghoz csak az objektum-interfszen keresztl frhetnk hozz.

Statikus vltozk
Ha eljrsban deklarltunk egy vltozt, az mindaddig megtartja az rtkt, amg abban az eljrsban fut a program amelyben ltrehoztuk. Ha kilpnk az eljrsbl, majd ismt visszalpnk, akkor a belpskor jradeklarldik a vltoz. Ezzel el is veszti azt az rtket, ami akkor volt benne, amikor utoljra nla jrtunk. Ha mgis szksgnk volna a vltoz korbbi rtkre pldul szeretnnk megszmolni, hogy hnyszor lptnk be az adott eljrsba , akkor deklarljunk statikus vltozt. A statikus azt jelenti, hogy akkor is megrzi az rtkt, ha elhagyjuk az eljrst, s az jbli belpskor nem deklarljuk ismt, gy nem vesztjk el a korbbi rtkt. Az utasts a kvetkez lesz:
Sub Megszamol() Static intSzamlal As Integer intSzamlal = intSzamlal + 1 MsgBox intSzamlal End Sub
Statikus vltoz
A statikus vltoz akkor is megtartja az rtkt, ha kilpnk abbl az eljrsbl, amelyben deklarltuk azt.

CD mellklet 07 Fejezet
Statikus.xls

83

Visual Basic for Application

2. rsz

A fenti kis program akkor is megtartja az intSzamlal rtkt, ha kilpnk az eljrsbl. Az ismtelt vgrehajtsok eredmnye az lesz, hogy az zenetpanelben minden esetben eggyel nagyobb szm jelenik meg, mint a korbbi futtats alkalmval.

Tegynk rendet!
Felmerlhet a krds, hogy melyik vltozt hol s hogyan deklarljuk. Azokat az llandkat s vltozkat, melyeket a projekt tbb moduljban, tbb eljrsban szeretnnk hasznlni, rdemes egy direkt erre a clra ltrehozott ltalnos modulban meghatrozni. Vigyzzunk arra, hogy az Excel objektumok moduljai osztlymodulok. Az itt meghatrozott globlis vltozkat a Visual Basic bezrja. Ezek j tulajdonsgai lesznek az objektumnak, s csak az objektum-interfszen keresztl rhetjk el ket. Ha kisebb programot runk, vagy jl elhatrolhat rszekre bonthat a program, akkor rdemes egy-egy sszetartoz rszt kln modulba megrni. Ilyen esetben lesznek modul szint llandink s vltozink. Ezeket hasznos az eljrsok el a modul elejre rni. gy mindig egy helyen kell keresnnk a dolgainkat. Az eljrsok llandit s vltozit tegyk az eljrs els soraiba. A cl megint az ttekinthetsg. Fontos, hogy deklarlhatunk olyan vltozkat is, melyek az adott eljrsban vnyesek, de kls rtkek feldolgozsra alkalmasak. Ezek az eljrsok paramterei. Az eljrsok paramtereit az eljrson bell ugyangy hasznlhatjuk, mintha ott deklarltuk volna.

84

8. fejezet

Az adatok hasznlata

r tudjuk, hogy hogyan lehet vltozkat, llandkat meghatrozni, deklarlni. Az adatokat azrt troljuk, mert fel szeretnnk dolgozni ket. A vltozk tartalmval klnfle mveleteket vgezhetnk. A feldolgozs sorn matematikai, logikai s szveges mveleteket fogunk vgrehajtani. A szmtsokban hasznlt mveleti jeleket opertornak nevezzk. A kvetkez fejezetben ismerkedjnk meg az adatokon vgezhet mveletekkel, mveleti jelekkel. Ismt tegynk fel krdseket! w Mit jelent az rtkads? w Milyen mveleteket hajthatunk vgre a trolt adatokon? w Milyen mveleti jeleket hasznlhatunk?

rtkads
Egy-egy vltoznak adhatunk gy is rtket, hogy egyszeren egy egyenlsgjel mg berjuk azt az rtket, amit trolni szeretnnk. Mskor egy szmts eredmnyt rgztjk egy vltozban. Mind kt esetben rtkadsrl beszlnk. Kezdjk a legegyszerbbel. Az intSzamlalo vltozban troljuk a 25-s rtket. Ezt gy kell a programba rni:
intSzamlalo = 25
rtkads
rjuk le a vltoz nevt s utna egy egyenlsgjelet. Az egyenlsgjel mg rjuk ba azt az rtket vagy kifejezst, amit a vltozban trolni szeretnnk.

Ilyennel mr tallkozhattunk a korbbi fejezetekben is. De nzzk a tovbbi lehetsgeket. Az rtkads jobb oldaln nemcsak konstansok, konkrt rtkek szerepelhetnek, hanem kifejezsek is. Oda kpleteket is rhatunk. A kpletekben felhasznlhatjuk a program vltozit. Taln mg emlksznk a szmll rtkadsra, ahol a jobb oldalon ugyanazt a vltozt hasznltuk, mint a baloldalon.
intSzamlalo = intSzamlalo + 1

85

Visual Basic for Application


A feldolgozs menete
Az rtkads feldolgozsa sorn a program minden esetben az egyenlsgjel jobb oldalra rt kifejezst dolgozza fel, majd az eredmnyt a bal oldalra rt vltozba rja.

2. rsz

Objektumok tulajdonsgai
Az objeltumok tulajdonsgai, nem msok, mint az objektumba zrt vltozk. Ezeknek rtket adhatunk, vagy kiolvashatjuk a tartal-

Emlkezznk arra is, hogy a Visual Basic milyen sorrendben dolgozza fel az elz utastssort. Elbb elvgzi a jobb oldalon tallhat szmtst, majd az eredmnyt berja a baloldali vltozba. Az utasts vgrehajtsa eltt az intSzamlalo vltoznak van valamilyen rtke, de a parancs vgrehajtsa utn ezt az rtket eggyel nveltk. Mieltt rtrnnk az opertorokra, mg egy kis idt tltsnk el az rtkad utastsokkal. Az objektumokrl szl fejezetben olvashattunk, hogy az objektumok egyik jellemzje az, hogy milyen tulajdonsgai vannak. A tulajdonsgok valjban az objektumban trolt vltozk, melyek rtkt bellthatjuk a programban. A vltozkat csak az objektumok interfszn keresztl rhetjk el. Vagyis, ha egy objektum egyik tulajdonsgt szeretnnk belltani, akkor egy rtkad utastst kell rnunk a programba. Ha pldul, azt szeretnnk, hogy az aktv munkalap A1-es celljba bekerljn egy adat, akkor a Range("A1") objektum Value tulajdonsgba kell rnunk az adatot. Pldul gy:
Range("A1").Value = "Hell vilg"

Az objektum tulajdonsgai nem msok, mint az objektumba zrt bels vltozk. Ha ez gy van, akkor ki is olvashatjuk az objektumok tulajdonsgainak pillanatnyi tartalmt. A kvetkez kis eljrs ezt teszi! Kiolvassa az pp aktv munkalap A1-es celljba rt rtket s kirja az Immedate ablakba.
Sub KiOlvas() Debug.Print Range("A1").Value End Sub

Mg azt is megtehetjk, hogy egy objektum tulajdonsgnak tartalmt tadjuk egy msik objektum tulajdonsgnak. Egy rdekes plda! Ebben megismerkednk a Not opertorral. Ez az opertor ellenkezjre vltja egy logikai vltoz tartalmt. Ha True volt, akkor ettl a mvelettl False-ra vlt s viszont. Ez pp j is! Ugyanis a munkalap cellarcsaikak a megjelentst egy olyan tulajdonsg hatrozza meg, melynek a tartalma egy logikai rtk. A cellarcsok ki- bekapcsolst vgz program teht a kvetkez lesz:
CD mellklet 08 fejezet
Ertekadas.xls

Sub KiBe() ActiveWindow.DisplayGridlines = Not ActiveWindow.DisplayGridlines End Sub

86

8. fejezet

Az adatok hasznlata
Opertorok
A programban hasznlt mveleti jeleket opertoroknak nevezzk.

Opertorok
Ideje most mr az opertorokkal foglalkozni. A Visual Basic opertorok lehetnek egy vagy tbb karakteresek. A matematikai opertorok mveleti jelek tbbsge egy karakteres, mg a logikai opertorok tbb karakteresek.

Aritmetikai opertorok
Az aritmetikai opertorokkal matematikai mveleteket vgznk. A Visual Basicben ht aritmetikai opertort hasznlhatunk. Ebben benne van a ngy alapmvelet, a hatvnyozs, az egszszm oszts s a maradkoszts. A matematikai alapmveletet a 3. tblzatban talljuk. 3. tblzat: Aritmetikai opertorok
Mvelet Hatvnyozs Szorzs Oszts Egszoszts Maradkoszts sszeads Kivons Opertor ^ * / \ Mod + Plda 3^2 2*4 7/3 7\3 7 Mod 3 7+4 7-4 Eredmny 9 8 2,3333 2 1 11 3 Aritmetikai opertorok
A szmtan rn hsznlt matematikai mveleti jeleket aritmetikai opertornak nevezzk.

A ngy alapmveletet valsznleg mindenki ismeri, ahogy a hatvnyozst is. Mgis a hatvnyozs, egszoszts s maradkoszts opertorokrl beszljnk egy kicsit. A hatvnyozsrl csak a mveleti jel miatt ejtnk szt. Kicsit msknt mkdik, mint a tbbi karakter, amit berunk a programba. rjunk eljrst, amiben hatvnyozunk, de kzben figyeljnk arra is, hogy mikor jelenik meg a hatvnyozs opertora. A program szmtsa ki kettnek a harmadik hatvnyt. Az eredmnyt rja be az ppen aktv munkalap B2-es celljba. 1. rjuk be addig a programot, amg azt a 88. oldalon lthat 22. bra 1. lpse mutatja! 2. ssk le az Alt Gr+3 (bet billentyzet) kombincit. 3. Ne lepdjnk meg! A hatvnyozs mveleti jel nem jelenik meg. Ez a billenty gy mkdik! 4. rjuk be a hatvnykitevt! Ez a mi pldnkban 3.

87

Visual Basic for Application 5. A kitev bersa utn megjelenik a mveleti jel is! 6. Futtassuk le az eljrst, s nzzk meg az eredmnyt!

2. rsz

22. bra: A hatvnyozs opertor bersa A kvetkez mveleti jel az egszoszts mveleti jele. Ezzel ritkbban tallkozunk, ez a \ jel. Az egszoszts eredmnye egy egsz szm, vagyis az oszts eredmnynek a trtrszt, elhagyja a program. Ennek megfelelen e 7\2 s a 6\2 eredmnye mindt mvelet esetn 3 lesz. De vajon mi lesz azzal a rsszel, ami az osztsbl megmaradt? Ezt egy jabb opertorral a maradkosztssal szmthatjuk ki. Ennek az osztsnak az eredmnye az egszoszts utn maradt maradk. A maradkoszts mveleti jele a modusz sz rvidtse a Mod. Pldul a 7 Mod 2 erdmnye 1 lesz, hiszen az egszszm oszts maradka ennyi. A 10 Mod 6 eredmnye 4.

A mveletvgzs sorrendje
Priorits
Azt, hogy melyik mvelettel kezdi a szmolst a program a mveletek prioritsnak nevezzk.

Matematika rkon tanultuk a mveletek vgrehajtsi sorrendjt. Ezt a mveletek prioritsnak neveztk. Elbb a szorzs s az oszts majd az sszeads s a kivons. De itt tbb opertor van. A mveletek vgrehajtsi sorrendjt a 4. tblzatbl nzhetjk meg. Elfordulhat, hogy nem megfelel szmunkra ez a mveletvgzsi sorrend. Ezen a zrjelek alkalmazsval vltoztathatunk. Ebben az esetben mint azt a matematikban is tanultuk a legbels zrjeltl kezdve s onnan kifel haladva fogja vgrehajtani a program a mveleteket.

88

8. fejezet 4. tblzat: Az aritmetikai mveletek vgrehajtsi sorrendje


Mvelet Hatvnyozs (^) Szorzs (*) Oszts (/) Egszoszts (\) Maradkoszts (Mod) sszeads (+) Kivons (-) A vgrehajts sorrendje 1. 2. 2. 3. 4. 5. 5.

Az adatok hasznlata

Szvegkezel opertorok
A szvegekkel ktfle mveletet vgezhetnk. Az egyik a szveg sszevons mvelete a msik a helyettest karakteres sszehasonlts. Szvegsszevons w Ennek opertora a &. Ezt az opertort arra hasznlhatjuk, hogy kt vagy tbb szveges kifejezst ez lehet szveglland, szveg tartalm vltoz vagy szveges eredmny szmts egyms mg helyezzk. Erre egy kicsit romantikus plda, amikor Rme nevt troljuk az egyik vltozban, a msikba Jlia nevt rjuk, s a kt vltoz tartalmt egy eredmny vltozban egytt sszevonva, egytt troljuk. me a program, amely sszeadja Rmet s Jlit:
Sub Osszevon() Dim strFiu As String Dim strLany As String Dim strEgyutt As String strFiu = "Rme" strLany = "Jlia" strEgyutt = strFiu & " s " & strLany Debug.Print strEgyutt End Sub
Konkatenci
A szvegsszevons mveletet konkatencinak nevezzk. Ezt a mveleti jelet arra hasznlhatjuk, hogy sszefzzk a szvegeket egy szvegg.

CD mellklet 08 Fejezet
Szoveges.xls

Like opertor
A Like opertor segtsgvel szvegtredkeket hasonlthatunk ssze. Az sszehasonltsra helyettest karaktereket hasznlunk,

A program eredmnye, hogy az strEgyutt vltoz tartalma Rme s Jlia. Helyettest karakterek w A msik szveges opertor a Like. Ezt a mveleti jelet arra hasznlhatjuk, hogy egy tetszleges szvegrszrl megmondjuk, tartalmazza-e az ltalunk keresett karaktersort. Ezzel mr tallkozhattunk,

89

Visual Basic for Application

2. rsz

amikor az opercis rendszerben egy fjl nevbl csak egy kisebb rszletet ismertnk. Ilyenkor helyettest karaktereket hasznltunk. Most is ezt fogjuk tenni. A mveleti jel bal oldalra a vizsglt szveget rjuk, a jobb oldalra pedig azt a helyettest karaktereket tartalmaz szveg tpus rtket. Ha pldul, azt szeretnnk megvizsglni, hogy a szveg kezd betje A bet, akkor ezt a kvetkez paranccsal tehetjk meg:
CD mellklet 08 Fejezet
Szoveges.xls

Sub VanABenne() Debug.Print "Alkalmazott" Like "A*" End Sub

Ha a fenti eljrst lefuttatjuk, akkor az Immediate ablakban a True rtk jelenik meg. A * helyettest karakter ugyanis egy vagy tbb karakternyi szveget helyettesthet. Ezzel az sszehasonltssal teht azt vizsgltuk, hogy a bal oldali szveg A betvel kezddik, s nem vizsgltuk az els bett kvet tovbbi karaktereket. Most vizsgljuk meg azt, hogy a jobb oldalra rt szvegben miket adhatunk meg? Szemlltesse a lehetsgeket egy-egy kis plda egy-egy rvid magyarzat ksretben. A krdjel helyettest karaktert ismerjk az opercis rendszerbl. Ezzel egy bett helyettesthetnk. Most rjunk egy rvidke programot, ami azt ellenrzi, hogy a baloldalra rt szveg msodik karaktere l bet. Itt a krdjel helyettest karakterre lesz szksgnk.
CD mellklet 08 Fejezet
Szoveges.xls

Sub Masodikl() Debug.Print "Alma" Like "?l*" End Sub

A krdjel helyettest karakter helyn brmilyen bet llhat, Az eredmny azrt lett igaz, mert az alma sz msodik betje l. A zr csillag helyettest karakter szerepe az, hogy ne vegye figyelembe az l bett kvet karaktereket. Ha a mvelet bal oldalra olyan szt runk, amelynek a msodik betje nem l, akkor az eredmny False lesz. Hasonl mdon kereshetnk r brmilyen szmra. Tegyk fel, hogy olyan rtket keresnk, melynek az els karaktere szm. Ebben az esetben a krdjelet nem hasznlhatjuk, mert az nem csak a szmokat helyettesti, hanem brmelyik karaktert. Szmot is, bett is. A szmjegyek helyettestsre a # karakter szolgl. Vessk ssze a ? s a # helyettest karakter eredmnyt.
CD mellklet 08 Fejezet
Szoveges.xls

Sub SzamJegy() Debug.Print "4-es" Like "#-es" 'az eredmny True Debug.Print "e-es" Like "#-es" 'az eredmny False Debug.Print "4-es" Like "?-es" 'az eredmny True

90

8. fejezet
Debug.Print "e-es" Like "?-es" 'az eredmny True End Sub

Az adatok hasznlata

Az els kt sorban a # helyettest karaktert hasznltuk. A msodik sor eredmnye azrt lett False (hamis) mert ott az els karakter helyre szveget rtunk. A harmadik s negyedik sor mindkt esetben True eredmnnyel jrt, mert a krdjel nem tesz klnbsget a szmjegyek s a bet karakterek kztt. A # minden esetben csak egyetlen szmjegyet helyettest. Vagyis, ha arra lennnk kvncsiak, hogy az els kt karakter helyn szm van-e, akkor kt # helyettest karaktert kne oda rnunk. gy is hasznlhatjuk a Like opertort, hogy egy adott karakterpozciban nem egy betre keresnk r, hanem tbbre. A plda taln kiss egyszer, de jl szemllteti a szgletes zrjelek kz rt betk feladatt. A szgletes zrjelek kztt felsorolt betk egy karakterhelyre helyettestenek. Vizsgljuk meg, hogy a baloldalon Kata, vagy Kati szerepel-e, de ha Kat van a baloldalon, akkor hamis legyen az eredmny.
Sub KatiKato() Debug.Print "Kata" Like "Kat[ai]" ' az eredmny True Debug.Print "Kati" Like "Kat[ai]" ' az eredmny True Debug.Print "Kat" Like "Kat[ai]" ' az eredmny False End Sub
CD mellklet 08 Fejezet
Szoveges.xls

A harmadik eset azrt ad False (hamis) eredmnyt, mert a szgletes zrjelek kztti felsorolsban nem szerepel az bet. A Like opertort s a szgletes zrjel helyettest karaktert arra is hasznlhatjuk, hogy a egy bettartomnyra keressnk r. Tegyk fel, hogy azokat az rtkeket szeretnnk megtallni, amelyek az bc els rszbe esnek. Vagyis azokra az rtkekre szeretnnk igaz rtket kapni eredmnyl. Ahol a bal oldali szveg els betje az a s a az l betk kz esik. Ezt a kvetkez utastssorral adhatjuk meg:
Sub AbcEleje() Debug.Print "Alagi" Like "[A-L]*" az eredmny True Debug.Print "Marosi" Like "[A-L]*" az eredmny False End Sub
CD mellklet 08 Fejezet
Szoveges.xls

Ha ennek fordtottjra lenne szksgnk, akkor ugyanezt a parancsot hasznlhatjuk, csak a szgletes zrjelek kztt felkiltjellel kell kezdennk a helyettestst. Az elz pldval ellenttes eredmnyt ad a kvetkez eljrs:
Sub AbcVege() Debug.Print "Alagi" Like "[!A-L]*" az eredmny False
CD mellklet 08 Fejezet
Szoveges.xls

91

Visual Basic for Application


Debug.Print "Marosi" Like "[!A-L]*" az eredmny True End Sub
Optiont Compare Text
Ezzel a paranccsal bellthatjuk az adott modul sszehasonltst gy, hogy ne klnbztesse meg a kis- s nagybetket.

2. rsz

A Like opertor alaprtelmezett sszehasonltsi mdja binris. Ez azt jelenti, hogy klnbsget tesz a kis s nagybetk kztt. Ha az eljrsokon kvlre berjuk az Option Compare Text sort a Visual Basic azonosnak tekinti az adott bet kis s nagy vltozatt. A Like opertor helyettest karaktereit a 5. tblzatban foglaltuk ssze: 5. tblzat: Helyettest karakterek
Karakter * ? [...] Mit helyettest? Egy vagy tbb karaktert helyettest. Egyetlen szveg vagy szm karaktert helyettest. Egy karakter helyre helyettesti a zrjelek kz rt betket, vagy szmokat, vagy a ktjelekkel rt karakterek tartomnyt. Egy karakter helyre kihagyja a zrjelek kz rt betket, vagy szmokat, vagy a ktjelekkel rt karakterek tartomnyt. Egy pozcira brmilyen szm helyettestsre szolgl.

[!...]

sszehasonlt opertorok
sszehasonlt opertor
Az sszehasonlt opertorokkal kt vagy tbb vltoz rtkt vethetjk ssze. A mvelet eredmnye csak True (igaz) vagy False (hamis) lehet.

A program futsa kzben klnbz vltozk tartalmtl tehetjk fggv, hogy milyen mveletekkel folytatjuk a programot. A vltozk tartalmnak sszehasonltsra hasznljuk a sszehasonlt opertorokat. Az sszehasonlt opertorok felhasznlsval olyan kifejezseket hozhatunk ltre, melynek az eredmnye True (igaz) vagy False (hamis) logikai rtk. Azokat a kifejezseket, amelyek csak True vagy False eredmnyt adhatnak, logikai kifejezseknek is nevezzk. Ha a logikai kifejezsek eredmnyt szeretnnk megrizni, akkor Boolean tpus vltozt kell hasznlnunk. Nzznk egy egyszer programrszletet, amelyben egy logikai kifejezs szerepel.
Dim bolIgazE As Boolean Dim sngSzam_1 As Single Dim sngSzam_2 As Single sngSzam_1 = 18.23 sngSzam_2 = 17.45 bolIgazE = sngSzam_1 < sngSzam_2

CD mellklet 08 Fejezet
Logikai.xls

92

8. fejezet

Az adatok hasznlata

A kt vltoz kz rt < jel egy sszehasonlt opertor. A kifejezs eredmnye False lesz, mert nem igaz a felttelezs, miszerint a 18,23 kisebb mint 17,45. Ennl persze tbb sszehasonlt opertort is hasznlhatunk. Ezeket soroljuk fel a 6. tblzatban. 6. tblzat: Az sszehasonlt opertorok
Opertor = > < >= <= <> Plda 7=3 7>3 7<3 7 >= 3 7 <= 3 7 <> 3 Hogy olvassuk a kifejezst? Igaz az llts, hogy hogy 7 egyenl 3-al? Igaz az llts, hogy 7 nagyobb mint 3? Igaz, hogy 7 kisebb mint 3? Igaz, hogy 7 nagyobb vagy egyenl mint 3? Igaz, hogy 7 kisebb vagy egyenl mint 3? Igaz, hogy 7 nem egyenl 3-al? Eredmny False (hamis) True (igaz) False (hamis) True (igaz) False (hamis) True (igaz)

A vlasz a feltett krdsekre csak igaz True vagy hamis False lehet. De mit kell tennnk, ha egyszerre tbb krdsnk is van? Tovbbi logikai opertorokat hasznlunk.

Logikai opertorok
A logikai opertorok arra szolglnak, hogy egyszerre tbb logikai sszehasonlts eredmnyt sszevonjuk. A logikai opertorokkal olyan rtkeket dolgozhatunk fel, melyek logikai eredmnnyel True vagy False rendelkeznek. A logikai opertorok hasznlata is logikai kifejezst eredmnyez, vagyis ezek eredmnye is csak True vagy False lehet. Ilyen kifejezseket a mindennapi letben is hasznlunk. Pldul ahhoz, hogy egynk tbb felttelnek is teljeslnie kell. Ha hes vagyok s van mit enni, akkor eszem! Itt kt feltteltl is fgg, hogy eszem-e vagy sem. Hiba vagyok hes, ha nincs mit enni, de hiba van ennival, ha nem vagyok hes. A kt felttelt sszehasonlt opertorokkal vizsglhatjuk meg, miszerint vagy igaz, hogy hes vagyok vagy hamis, ugyangy, minthogy az is igaz vagy hamis lehet hogy van-e ennival a kzelben. Tegyk fel, hogy kt logikai vltozt vizsglunk bolX s bolY rtkt. Minkt vltozban csak True vagy False rtkeke lehetnek. A logikai opertorok felsorolst a 94. oldalon tallhat 7. tlzatban gyjtttk egybe. Mr csak az a krds, hogy mire hasznlhatjuk a logikai kifejezseket. Erre kapunk vlaszt a kvetkez fejezetben, ahol a programvezrl utastsokat ismerhetjk meg.
Logikai opertorok
A logikai opertorokkal olyan kifejezseket dolgozhatunk fel melyek rtke True vagy False.

93

Visual Basic for Application 7. tblzat: Logikai opertorok


Opertor And (s) Mikor True (igaz) az eredmny?

2. rsz

Az eredmny akkor s csak akkor True, ha egyszerre egy idben az sszes vizsglt rtk True. Vagyis, ha mind bolX s bolY tartalma True. A vagy logikai mvelet minden esetben True (igaz) ertket ad vissza, ha brmelyik vizsglt rtk True (igaz) rtket tartamaz. Mshogy fogalmazva vagy ennek vagy annak, de legalbb egynek igaznak kell lennie. Ha a Xor mveletet vgznk, akkor annak az eredmyne akkor ad True rtket eredmnyl, ha a vizsglt vltozk nem azonos rtkeket trolnak. Vagyis, ha az sszes vizsglt rtk True vagy mind False, akkor az eredmny False, egybknt True. Az xor mvelet prja az eqv. Ez a mvelet az egyezsget vizsglja. Ha az sszes vltoz vagy True vagy False rtk, az eredmny True, egybknt False. Ez egy logikai vltoz tartalmt vltla t ellenkez rtkre. Ha egy logokai rtk el rjuk, akkor ha az Treu volt False eredmnyt ad, ha False volt az eredmny True lesz.

Or (vagy)

Xor (kizr vagy)

Eqv (ekvivalencia)

Not (negls)

sszefoglals
A vltozknak rtket adhatunk. Azt a vltozt, aminek rtket adunk, mindig az egyenlsgjel bal oldalra rjuk. Az egyenlsgjel jobb oldaln vagy egy konstans rtk vagy egy kifejezs llhat. A Visual Basic, minden esetben az egyenlsgjel jobb oldalra rt kifejezs kirtkelsval kezdi, majd az eredmnyt a bal oldali vltozba rja. Ennek megfelelen, a vltoz, aminek rtket adunk llhat az egyenlsgjel jobb oldaln is. Ebben az esetben a jobb oldalon felhasznlt vltoz a kiindul rtket tartalmazza, ami a mvelet vgrehajtsa utn megvltozik a jobb oldalon meghatrozott szmtsnak megfelelen. Az rtkad mveletekben az egyenlsgjel jobb oldalra rt kifejezsekben mveleti jeleket hasznlunk. Ezeket a szmtstechnikban opertoroknak nevezzk. Az opertorok llhatnak tbb betbl is. Gondoljunk a Mod, az And vagy az Or opertorokra.

94

9. fejezet

Programvezrl utastsok
rjnk t a programvezrl utastsok megismersre. Mint azt ms az alapfogalmak rszben olvastuk, brmilyen programot megrhatunk hrom utaststpussal. Ezek a szekvencia, a szelekci s az iterci. A szekvencia utaststpussal kln nem foglalkozunk. Ez az utaststpus pldul az rtkads, vagy egy eljrs meghvsa. Mskor ezek segtsgvel vltoztatjuk meg egy-egy objektum tulajdonsgait. Ebben a fejezetben a szelekci s iterci utaststpusokkal ismerkednk. A fejezetben klns figyelmet fordtunk az adatfeldolgozs s a vezrlsek kapcsolatra. Keressk a vlaszt a kvetkez krdsekre: w Hogy gazhatunk el a programban? w Hogy fgg ssze az adat s a feldolgozs? w Hogyan ismtelhetnk meg programrszeket?

Elgazsok (szelekcik)
Az elgazs vezrl utastsok segtsgvel a vltozk vagy objektum-tulajdonsgok kirtkelse utn ms-ms utastscsoportokat hajthatunk vgre. A kirtkelst az elz fejezetben olvasott sszehasonlt s logikai opertorokkal vgezzk el. A Visual Basic szelekcis elgazsi parancsai az If s a Select.
Elgazsok
Az elgazs utaststpus a programban trolt vltozk tartalmtl fggen a program ms-ms sorait hajtjk vgre.

If... Then... Else elgazs


Ezzel az elgazssal logikai kifejezsek segtsgvel kirtkelhetjk a feldolgozs alatt ll vltozkat. Mind azt az elz fejezeten lttuk a logikai kifejezsek eredmnye True (igaz) vagy False (hamis) lehet. Attl fggen, hogy mi lett a logikai kifejezs rtke ms-ms utastscsoportot hajthatunk vgre. 95

Visual Basic for Application

2. rsz

Egysoros If szelekci w Az If elgazsnak kt szintaktikja rsi mdja is van. Az egysoros s a tbbsoros. Az egy soros a kvetkez:
If logikai_kifejezs Then Utasts_1 Else Utasts_2

Ez a rvid rsmd. Ezt akkor hasznljuk, amikor a logikai kifejezs eredmnytl fggen csak egy utastsban tr el a program. Termszetesen itt meghvhatunk ltalunk rt eljrsokat is, hiszen azok is egy utastsnak szmtanak. Ha a logikai_kifejezs rtke True, akkor az Utasts_1 kerl vgrehajtsra, ellenkez esetben vagyis, ha False az eredmny , akkor az Utasts_2 parancsot fogja vgrehajtani a program. Ennl rvidebb mr csak akkor lehet az If utasts, ha nincs szksgnk az utasts Else gra. Tbbsoros If szelekci w Amikor a logikai kifejezs eredmnytl fggen nem csak egy utasts az eltrs, akkor a tbbsoros rsmdot hasznlunk. Ez a kvetkez:
If logikai_kifejezs Then Utasts_1 Utasts_2 ...... Else Utasts_3 Utasts_4 ...... End If

Ez az rsmd gy mkdik, hogy amikor a logikai kifejezs rtke True, akkor az If s Else kztti utastsokat hajtjuk vgre, az Else s End If kztti rszt tugorja a program. Ha pedig a kifejezs eredmnye False, akkor az If s Else kz rt utastsokat hagyjuk figyelmen kvl, s az Else s End If kztti utastsokat vgzi el a program. Tbb felttel vizsglata w Az If szerkezet teljes rsmdjban tbb felttelt is vizsglhatunk. Ennek az rsmdja:
If logikai_kifejezs_1 Then Utasts_1 Utasts_2 ...... ElseIf logikai_kifejezs_2 Then Utasts_3 Utasts_4

96

9. fejezet
...... ElseIf logikai_kifejezs_n Then Utasts_5 Utasts_6 ...... Else Utasts_7 Utasts_8 ...... End If

Programvezrl utastsok

Az If elgazsban annyi ElseIf sort runk be, amennyit akarunk. Ebben a tekintetben nincs korltozs. Termszetesen minden ElseIf mgtt ms-ms logikai kifejezst rtkelnnk ki. Fontos szem eltt tartani, hogy egy If utastsban csak egy utastscsoport kerl vgrehajtsra. Ez azt jelenti, hogy ha igaz a logikai_kifejezs_1 s a logikai_kifejezs_2 kifejezs rtke, akkor is csak egy gba lp be a program. Teht a pldban az els g utastsait vgrehajtja a program, de a msodik gba akkor sem lp be a program, ha ennek a kifejezsnek is True az rtke.

Az If... End If szelekci alkalmazsa


Az utastsok mkdsrl akkor szerezhetnk igazi tapasztalatokat, ha ki is prbljuk ket. Hozzunk ltre egy j munkafzetet, s illessznk be egy ltalnos modult! A modul neve legyen Vezerles. Ebben a modulban fogjuk kiprblni azokat a vezrl utastsokat, amelyekrl ebben a fejezetben olvasunk. A feladat az lesz, hogy a megnyitott munkafzet A1-es celljba berunk egy szmot, s a bert szm rtktl fggen a B1-es cellba rassunk ki egy rtkel szveget. Ha az A1-es cella tartalma negatv szm, akkor a Kisebb mint nulla., ha pozitv, akkor a Nagyobb mint nulla. ha pedig pont nulla, akkor a Nulla szveg jelenjen meg. A programot igyekezznk gy megrni, hogy felhasznljuk a tanultakat! Deklarljunk megfelel llandkat s vltozkat! Valahogy gy!
Sub If_Teszt_1() - llandk deklarlsa Const STR_NAGYOBB As String = "Nagyobb, mint nulla." Const STR_KISEBB As String = "Kisebb, mint nulla." Const STR_NULLA As String = "Nulla." - Vltozk deklarlsa Dim sngCellaErtek As Single Dim strEredmeny As String

CD mellklet 09 Fejezet
Vezerlesek.xls

97

Visual Basic for Application


- Adat bekrs sngCellaErtek = Range("A1") - Az adat feldolgozsa If sngCellaErtek > 0 Then strEredmeny = STR_NAGYOBB ElseIf sngCellaErtek < 0 Then strEredmeny = STR_KISEBB Else strEredmeny = STR_NULLA End If - Eredmny kirsa Range("B1") = strEredmeny End Sub

2. rsz

Az eljrs elemzst kezdjk az adatbekrst vgz sorral.


sngCellaErtek = Range("A1")

Ebben a sorban beolvassuk a program sngCellaErtek vltozba az ppen aktulis munkafzet, aktulis munkalapjn tallhat A1-es cella tartalmt. A program tovbbi rszben mr nem fordulunk kzvetlenl a elemzsre vr cellhoz, hanem a vltozban trolt rtkkel dolgozunk tovbb. Az gy vltozba rt rtket ki fogjuk elemezni. Erre szolgl a kvetkez utastssor:
If sngCellaErtek > 0 Then

Az sngCellaErtek > 0 sszehasonlt kifejezs eredmnye csak ktfle lehet, True vagy False. Ha a kifejezs rtke True, akkor a kvetkez utastsban az eredmnyt vltozba berjuk a megfelel konstans rtkt, vagyis azt, ami a Nagyobb, mint nulla rtket tartalmazza. Ha teljeslt a felttel, akkor az If-bl kilp a program, az End If sort kvet paranccsal folytatja tovbb a program vgrehajtst. Ha a felttel nem teljesl False eredmnyt ad a kifejezs kirtkelse , akkor tlpnk a kvetkez kirtkel sorra.
ElseIf sngCellaErtek < 0 Then

Ebben a sorban az sszehasonlt kifejezssel azt vizsgljuk, hogy a feldolgozand rtk kisebb-e, mint nulla,a ha igen, akkor az eredmny vltoz rtkbe berjuk az STR_KISSEBB lland tartalmt. Ha nem teljesl a felttel, akkor az If parancs Else gt hajtjuk vgre. Vagyis, ha nem nagyobb s nem kisebb, mint nulla, akkor nem lehet ms csak nulla.

98

9. fejezet

Programvezrl utastsok

Az Else gban teht az eredmny strEredmeny vltozba berjuk a Nulla rtket. Az eljrs utols sorban mr nincs ms dolgunk, mint az eredmnyt kirni a megfelel cellba. Ezt hajtja vgre a kvetkez utasts:
Range(B1") = strEredmeny

Fontos megjegyezni, hogy az If elgazs minden esetben csak egy elgazsi gba lp be. Ha az egyik felttel igaznak bizonyul, akkor a program minden esetben az End If sort kvet parancsra lp.

Select Case szelekci


Visual Basic for Application msik elgazst vgrehajt utastsa a Select. Ebben az utastsban egyetlen kifejezst vizsglunk, s annak rtktl fggen gazunk el a programban. Az elgazs els sorba rjuk le azt a kifejezst, amelyet vizsglunk. A Case utastsok mg pedig azt, hogy a kifejezs milyen rtke esetn kell belpni az elgazsba. A Select Case szerkezetet a kvetkez mdon kell lernunk:
Select Case vizsgalt_kifejezes Case Ertek_1 ... Utasts_1 Utasts_2 .... Case Ertek_2 ... Utasts_3 Utasts_4 .... Case Ertek_n ... Utasts_5 Utasts_6 .... Case Else ... Utasts_7 Utasts_8 .... End Select
Select Case
Ezzel az elgazssal egy kifejezst rtkelnk ki, s annak a tartalmtl fggen lpnk be a program egy gba.

99

Visual Basic for Application

2. rsz

Tbb rtk
Egy Case utass mgtt tbb rtketsorolhat unk fel.

A Visual Basic vgiglpked a Case sorokon, s sszehasonltja a kifejezs pillanatnyi rtkt a Case mg rt rtkkel. Ha a kifejezs rtke egyezik a Case mg rt rtkkel, akkor belp az elgazsba, ha nem tovbb lp a kvetkez vizsglatra. Ha a vizsglat sorn egyetlen felttel sem teljeslt, akkor a Case Else gba rt utastsokat vgzi el a program. A Case Else g elhagyhat. Hasonlan az If szelekcihoz most is csak egy gba lpnk be. Vagyis azt az gat hajtjuk vgre, ahol elbb tallunk egyezst. Az egyes Case utastsok mgtt figyelhetnk akr tbb rtket is. Ezeket egymstl vesszvel elvlasztva soroljuk fel. Pldul:
Case 1,4,5,8,9

rtkhatr
A kezd s vgrtke kz rjuk be a To kulcsszt.

Ez a vizsglat tbb rtk esetn is True igaz. Ha a vizsgalt_kifejezes rtke egy, ngy, t, nyolc vagy kilenc, akkor ebbe az gba fog belpni a program. gy is figyelhetnk tbb rtket, hogy a Case mgtt megadjuk azt a legkisebb s a legnagyobb olyan rtket, amely esetn szeretnnk vgrehajtani az elgazst. Ezt a kvetkez mdon adhatjuk meg:
Case 3 To 7

Ebbe az gba akkor lpnk be, ha a vizsglt kifejezs rtke hrom s ht kz esik. Ha akkor szeretnnk belpni az egyik Case gba, amikor a vizsglt kifejezs nagyobb, mint egy meghatrozott rtk, akkor az Is kulcsszt hasznljuk a kvetkez rsmddal:
Kisebb vagy nagyobb
Ha kisebb vagy nagyobb rtk hatsra szeretnnk belpni egy gba, hasznljuk az Is kulcsszt

Case Is > 100

Ebbe az gba akkor jut be a program, ha a vizsglt kifejezs rtke nagyobb, mint 100. A klnbz vizsglati tpusokat egymssal kombinlva is hasznlhatjuk. Teht lehet egy Case mgtt rtkfelsorols, rtksv s minimum rtk. Pldul:
Case 1, 4, 12 To 17 , Is > 100

A Select Case szerkezetben a vizsglt kifejezs lehet egy vltoz tartalma vagy egy szmtott rtk. Ezzel a kt elgaz szerkezettel tudjuk meghatrozni, hogy a program egyes rszei mikor kerljenek vgrehajtsra.

100

9. fejezet

Programvezrl utastsok

A Select Case Alkalmazsa


Ksztsnk egy olyan eljrst, amelyik egytl htig terjed egsz szmokat dolgozunk fel. Az aktv munkalap A2-es celljba rjunk egy szmot egy s ht kztt. Ttelezzk fel, hogy ez a ht napjnak a sorszma. Az eljrs futtatsa utn a B2-es cellba rjuk be szvegesen a ht napjnak a nevt. Az eljrst nevezzk el Select_teszt_1 nvvel. A program a kvetkez lehet:
Sub Select_Teszt_1() landk deklarlsa Const STR_INPUT_CELLA As String = "A2" Const STR_OUTPUT_CELLA As String = "B2" Const STR_NAP_1 As String = "htf" Const STR_NAP_2 As String = "kedd" Const STR_NAP_3 As String = "szerda" Const STR_NAP_4 As String = "cstrtk" Const STR_NAP_5 As String = "pntek" Const STR_NAP_6 As String = "szombat" Const STR_NAP_7 As String = "vasrnap" Const STR_NAP_HIBA As String = "Nem megfelel rtk!" Vltozk deklarlsa Dim sngCellaErtek As Single Dim strEredmeny As String A feldolgozand adat beolvassa sngCellaErtek = Range(STR_INPUT_CELLA) Adatfeldolgozs sngCellaErtek = Int(sngCellaErtek) Select Case sngCellaErtek Case 1 strEredmeny = STR_NAP_1 Case 2 strEredmeny = STR_NAP_2 Case 3 strEredmeny = STR_NAP_3 Case 4 strEredmeny = STR_NAP_4 Case 5 strEredmeny = STR_NAP_5 Case 6 strEredmeny = STR_NAP_6 Case 7 strEredmeny = STR_NAP_7 Case Is < 1, Is > 7
CD mellklet 09 Fejezet
Vezerlesek.xls

101

Visual Basic for Application


strEredmeny = STR_NAP_HIBA End Select A feldolgozs eredmnye Range(STR_OUTPUT_CELLA) = strEredmeny End Sub

2. rsz

Futassuk le az eljrst, ismerkedjnk egy kicsit a mkdsvel. Vegyk szre, hogy ebben az eljrsban, az llandk kztt rgztettk a bemeneti s kimeneti cella nevt. Ez azrt lehet hasznos, mert, ha vltoztatni akarunk a programon, nem kell vgignznnk a teljes eljrst. Elegend az eljrs elejn az llandk tartalmt belltani a megfelel rtkre. Most nzzk meg a feldolgozs els sort:
sngCellaErtek = Int(sngCellaErtek)

Itt a bekrt adatrl levgjuk a tizedes rtket. Erre azrt van szksg, mert a felhasznl berhat a cellba trt szmot is. A 3,8, mg szerda. Az Int fggvny, csak a szm egsz rszt adja eredmnyl. Az eljrs tbbi rszt, nllan elemezzk ki! A szksges ismereteket, mr tudjuk. A Select tovbbi lehetsgeinek megismershez ksztsnk olyan eljrst, amelyik megvlaszolja, hogy egy sorszmmal bert hnap melyik vszakba esik. Az aktv munkalap A3-as celljba rjunk be egy szmot egy s tizenkett kztt. A B3-as cellban jelentsk meg azt, hogy a hnap melyik vszakba esik. Ebben az eljrsban kiprblhatjuk azt, hogy hogyan mkdik a Case mg rt felsorols. Az eljrs neve legyen Select_Teszt_2. me egy lehetsges megolds:
Sub Select_Teszt_2() llandk deklarlsa Const STR_INPUT_CELLA As String = "A3" Const STR_OUTPUT_CELLA As String = "B3" Const STR_TAVASZ As String = "Tavaszi hnap!" Const STR_NYAR As String = "Nyri hnap!" Const STR_OSZ As String = "szi hnap!" Const STR_TEL As String = "Tli hnap!" Const STR_HO_HIBA As String = "Nem megfelel rtk!" Vltozk deklarlsa Dim sngCellaErtek As Single Dim strEredmeny As String Adatfeldolgozs sngCellaErtek = Range(STR_INPUT_CELLA) sngCellaErtek = Int(sngCellaErtek) Select Case sngCellaErtek Case 3 To 5

102

9. fejezet
strEredmeny = STR_TAVASZ Case 6 To 8 strEredmeny = STR_NYAR Case 9 To 11 strEredmeny = STR_OSZ Case 12, 1, 2 strEredmeny = STR_TEL Case Is < 1, Is > 12 strEredmeny = STR_HO_HIBA End Select Eredmny kirsa Range(STR_OUTPUT_CELLA) = strEredmeny End Sub

Programvezrl utastsok

Ciklusok (itercik)
Most eleventsk fel egy kicsit azt a rszt, ahol a vltozkrl olvastunk. Akkor beszltnk a tmbkrl. Most a tmbkben, gyjtemnyekben trolt adatok feldolgozsrl lesz sz. Tmbkben trolt adatok feldolgozsa esetn ugyanazokat a lpseket hajtjuk vgre minden tmbelem feldolgozsakor. Annyiszor kell megismtelni a lpseket, ahny eleme a tmbnek van. Sorra kell vennnk a tmbben trolt adatokat. A tmbben trolt adatok feldolgozshoz ciklust kell szerveznnk. A Visual Basic for Application nyelvben a kvetkez ciklusokat valsthatjuk meg:
Iterci
A krnyezeti vltozktl fggen tbbszr hajthatunk vgre egy programrszletet.

For.... Next iterci


Kezdjk az egy dimenzis tmbk feldolgozsval! Erre a For-Next ciklust hasznlhatjuk. Ebben a ciklusban megadhatjuk a tmbvltoz els s utols elemnek a szmt. A ciklusban vgig lpkedhetnk a tmb elemein. A ciklus megvalstshoz szksgnk lesz egy vltozra, amelyben az aktulis lps sorszmt troljuk. Ezt a vltoz a ciklusszmll. Ennek a vltoznak az rtkt minden ismtlskor eggyel megnveli a Next sor. Ennek a ciklusnak a legegyszerbb formja a kvetkez:
Dim intSzaml As Integer For intSzaml = Kezdoertek To Vegertek Step Lepes .... A ciklustest utastsai .... Next intSzaml

103

Visual Basic for Application


A For Next mkdse

2. rsz

1. Amikor legelszr rlpnk a ciklus els For utastsra, a szmll intSzaml felveszi a kezd rtket Kezdoertek. 2. Mr itt rgtn a kezd lpskor a szmllt tartalmaz vltoz rtkt megvizsgljuk, hogy elrte-e a vgrtket. Ezt minden esetben megteszi a program, amikor a For sort hajtja vgre. 3. Ha a szmll nagyobb vagy egyenl, mint a meghatrozott vgrtk Vegertek , akkor a Next kulcsszt kvet utastssal folytatjuk az utastsok vgrehajtst. 4. Ha a szmll rtke kisebb, mint a meghatrozott vgrtk Vegertek tartalma , akkor a For kulcsszt kvet utastssal folytatjuk a program vgrehajtst. 5. Ha a negyedik lps kvetkezett be, akkor a ciklustestbe rt utastsok vgrehajtsa utn eljutunk a Next utastsig. Itt megnveljk a szmll rtkt, annyival, amennyivel a For sorban a Step kulcssz mgtt a Lepes vltozban meghatroztuk. A Step kulcssz nem ktelez. Ha nem adjuk meg, akkor automatikusan eggyel fog nvekedni a ciklusszmll rtke. 6. Innen ismt visszalpnk a For sorra. A mvelet ennek a listnak a 2. lpstl folytatdik. Vagyis megvizsgljuk, hogy a ciklusszmll rtke egyenl vagy nagyobb, mint a vgrtk. A kezdrtk, vgrtk s a lps brmilyen kifejezs, lland vagy bert rtk lehet. A lpskz rtke lehet negatv szm is. Ilyenkor a kezdrtknek nagyobbnak kell lennie, mint a vgrtknek.

A For Next alkalmazsa


Termszetesen most is ksztnk egy egyszer pldt, amelyben megvizsgljuk a ciklus mkdst. Illessznk be egy j ltalnos modult, s ebbe rjuk meg a For ciklus kiprblsra szolgl eljrst.
Vektor feldolgozsa
Vektor, vagy egydimenzis tmb feldolgozsakor egy ciklusban oldjuk meg a feladatot.

Egy dimenzis tmb feldolgozsa w A feladat a kvetkez! Krjnk be a felhasznltl t klnbz rtket egy telem tmbbe. Kssk ki, hogy csak egy s tz kztti rtket szabad berni. Az adatok bekrse utn vizsgljuk meg, hogy hnyszor kaptunk hatnl kisebb szmot. Az adat bekrsre hasznljuk az Inputbox fggvnyt.
Sub For_Next_teszt_1() - llandk deklarlsa Const STR_IN_CIM As String = "Szmok bekrse" Const STR_IN As String = ". szm?" Const STR_OUT_CIM As String = "A kisebbek szma!" Const STR_OUT As String = "db kisebb szm volt, mint " Const INT_HATAR As Integer = 6

CD mellklet 09 Fejezet
Vezerlesek.xls

104

9. fejezet
- Vltozk deklarlsa Dim intI As Integer Dim sngSzamok(1 To 5) As Single Dim bytKisebbek As Byte - Kezdeti rtkads, adatbekrs bytKisebbek = 0 For intI = 1 To 5 sngSzamok(intI) = InputBox(intI & STR_IN, STR_IN_CIM) Next intI - Feldolgozs For intI = 1 To 5 If sngSzamok(intI) < INT_HATAR Then bytKisebbek = bytKisebbek + 1 End If Next intI - Eredmny kirsa MsgBox bytKisebbek & STR_OUT & INT_HATAR End Sub

Programvezrl utastsok

Ebben az eljrsban szndkosan bontottuk kt rszre az adatbekrst s a feldolgozst, hogy szemlltethessk egy tmb vltoz feldolgozst. De nzzk a fontosabb rszleteket!
For intI = 1 To 5 sngSzamok(intI) = InputBox(intI & STR_IN, STR_IN_CIM) Next intI

Ebben a rszben az Inputbox fggvny felhasznlsval bekrtk az sszes feldolgozand adatot. Az adatokat egy tmbben troltuk. Mire a ciklus tszr megismtli a testbe rt utastsokat, a tmb elemeiben a begpelt rtkek vannak. rdemes megfigyelni, hogy a ciklusszmll pillanatnyi rtkt hasznltuk fel arra, hogy a ciklustest, minden ismtlsekor jabb tmbelembe rjunk adatot.
For intI = 1 To 5 If sngSzamok(intI) < INT_HATAR Then bytKisebbek = bytKisebbek + 1 End If Next intI

A feldolgozst hasonlan rtuk meg. A ciklusszmll rtkt az els lpsben visszalltottuk a megfelel kezd rtkre. A ciklustestben lv If-End If utastst arra hasznltuk, hogy megvizsgljuk, mekkora rtket rt a felhasznl az aktulis tmbelembe. Ha ez az rtk kisebb volt mint hat,

105

Visual Basic for Application

2. rsz

akkor megnveltk a kisebb rtkeket szmll vltoz tartalmt eggyel. Mire a ciklus vgrehajtotta mind az t ismtlst a bytKisebbek vltozban mr benne volt az eredmny. Ezt rattuk ki az eljrs utols sorban.
Tbb dimenzis tmb
Tbb dimenzis tmb feldolgozsa esetn annyi ciklust gyzunk egymsba, ahny dimenzija a tmbnek van.

Tbb dimenzis tmb feldolgozsa w Tbb dimenzis tmbk esetn annyi For-Next ciklust gyazunk egymsba, ahny dimenzis a tmb. Az ismtlsek szmnak egyezni kell az egyes dimenzikba rt elemszmmal. Oldjuk meg az elz pldt gy, hogy egy ktdimenzis tmb adatait dolgozzuk fel! Mivel az Excelben dolgozunk, egy kicsit tekintsnk elre! Az aktv munkalap C3:E9-es tartomnyba rjunk be egy s tz kz es szmokat. Szmoljuk meg azt, hogy hny olyan cella van, amelyben 6-nl kisebb rtket rt be a falhasznl. Ismt krjk be egy tmbbe a feldolgozand rtkeket, s ebben a tmbben vizsgljuk meg, az rtkeket! Ksztsk fel az aktv munkalapot a kvetkez adatokkal!

23. bra: Ksztsk el a feldolgozand adatokat Mivel az aktv munkalap adatait szeretnnk feldolgozni, kzenfekvnek tnik, hogy olyan tmbt deklarljunk az adatbekrshez, amelyik megegyezik a feldogozand terlet adataival. Ennek megfelelen a tmb a kvetkez lesz:
Dim sngSzamok(3 To 9, 3 To 5) As Single

Az adatok bekrst a Cells objektum segtsgvel vgezzk el. A Cells-nek kt argumentuma van. Az els a sorra mutat, a msodik pedig az oszlopra. Mivel az aktv munkalap harmadik sorban kezddnek az adatok s a kilencedik sorig tartanak, ehhez rdemes igaztani a tmb els dimenzijt. A msikat pedig a feldolgozand oszlopoknak megfelelen hatrozzuk meg. Amikor mr a tmbben vannak az adatok, a ciklust gy lltjuk ssze, hogy az vgiglpkedjen a megfelel sorokon s oszlopokon. A mintaplda a kvetkez:

106

9. fejezet
Sub For_Next_Teszt_2() - llandk deklarlsa Const STR_OUT_CIM As String = "A kisebbek szma!" Const STR_OUT As String = " db kisebb szm volt, mint " Const INT_HATAR As Integer = 6 - Vltozk deklarlsa Dim intI As Integer Dim intK As Integer Dim bytKisebbek As Byte Tmb vltoz a feldolgozand adatok szmra Dim sngSzamok(3 To 9, 3 To 5) As Single - Kezdeti rtkads bytKisebbek = 0 - Az adatok bekrse For intI = 3 To 9 *** A tmb sorai For intK = 3 To 5 *** A tmb oszlopai sngSzamok(intI, intK) = Cells(intI, intK) Next intK Next intI - Feldolgozs For intI = 3 To 9 *** A tmb sorai For intK = 3 To 5 *** A tmb oszlopai If sngSzamok(intI, intK) < INT_HATAR Then bytKisebbek = bytKisebbek + 1 End If Next intK Next intI - Eredmny kirsa MsgBox bytKisebbek & STR_OUT & INT_HATAR End Sub

Programvezrl utastsok
CD mellklet 09 Fejezet
Vezerlesek_2.xls

A fenti eljrs az adatbekrsi rszben vgiglpked az adatokat tartalmaz cellkon, s ennek megfelelen berja az ott tallt rtkeket az ltalunk deklarlt tmbbe. Azrt kellett a ciklusokat egymsba gyazni, mert gy tudjuk elrni a ktdimenzis tmb minden elemt. A kls ciklus a sorokon lpked vgig, a bels pedig annak a sornak az oszlopain, amire a kls ciklus mutat. gy a tmb minden elemt elri a program. A feldolgozsi rsz logikja ugyan ez. Ott is vgiglpkednk a ktdimenzis tmb minden elemn. Minden egyes elemet megvizsglunk, hogy elrte a hatot vagy nem, Ha nem rte el, akkor megnveljk a szmll rtkt eggyel, ha igen akkor vesszk a kvetkez adatot. Ha olyan feladattal tallkozunk, ahol nem kell a tmb minden elemt feldolgoznunk, akkor hasznlhatjuk a Step rszt a ciklusszervezsnek. Ez termszetesen csak akkor clravezet, ha a feldolgozand elemek azo-

107

Visual Basic for Application

2. rsz

nos tvolsgra vannak. Pldul minden harmadik, vagy tizedik elemet szeretnnk kirtkelni a programunkkal. Termszetesen nem tehetjk meg azt, hogy elbb zrjuk be a kls ciklust s utna a belst. De azt igen, hogy egy utastssorban zrjuk mindkt ciklust, ha azok egymst kvet sorokban lennnek.

For Each... Next gyjtemny iterci


For Each
Ezzel a ciklusszervezssel egy objektumgyjtemny elemeit dolgozhatjuk fel.

A gyjtemnyekben szintn egynl tbb adatot trolhatunk, vagy egynl tbb objektumra hivatkozhatunk. Az Office alkalmazsokban gyakran hasznljuk a programok bels gyjtemnyeit. Ilyenek az Excel-ben a munkalapok, munkafzetek, a Word-ben a dokumentumok, bekezdsek, az Access-ben a megnyitott rlapok, vagy a rajtuk tallhat vezrlsek. Amikor a feldolgozs sorn gyjtemnyek elemeit szeretnnk feldolgozni, akkor hasznljuk a For EachNext utastst. Ennek segtsgvel vgiglpkedhetnk az egyes elemeken, s feldolgozhatkjuk azok tulajdonsgait. Ez az iterci egy kicsit hasonlt az elzre. Itt is deklarlni kell egy vltozt, ami majd a ciklusszmll lesz. Ennek a vltoznak olyannak kell lennie, amilyen a gyjtemny eleme. Ha pldul, az Excel munkalapjait szeretnnk feldolgozni, akkor a ciklusszmll vltoznak munkalap tpusnak kell lennie. Ha cellk tartalmval dolgozunk, akkor tartomny Range tpust kell vlasztanunk. Ha nem tudjuk eldnteni, hogy milyen tpus a gyjtemny eleme, akkor az object adattpust vlasszuk. A ciklus ltalnos formja a kvetkez:
Dim objValtozo As Object For Each objValtozo In Gyujtemeny mveletket vgznk az objValtozo-val Next objValtozo

Elemezzk a fenti ciklust! A programrszlet els utastsa, a Dim sor, amelyben deklarltunk egy objektum tpus vltozt. Olyat, amilyen a gyjtemny tpusa. A For Each sorban az Each kulcsszt kvet vltoz az, ami vgiglpked a gyjtemny elemein. A Visual Basic mindaddig ismtli a ciklust, amg az elemek vgre nem r. A Next utastssorra rve vlt a gyjtemny kvetkez tagjra. Nzznk egy olyan eljrst, ami vgiglpked a megnyitott munkafzet minden munkalapjn. Nyissunk egy munkafzetet, kapcsoljunk t a Visual Basic felletre. Szrjunk be egy j ltalnos modult, s rjuk meg a kvetkez eljrst.

108

9. fejezet
Sub For_Each_teszt_1() Dim wksLap As Worksheet For Each wksLap In Worksheets Debug.Print wksLap.Name Next wksLap End Sub

Programvezrl utastsok
CD mellklet 09 Fejezet
Vezerlesek_3.xls

Nzzk meg az eljrs lpseit! Az els sorban deklarltunk egy vltozt, aminek a tpusa a Worksheet, vagyis egy munkalap. Ez lesz a ciklusszmllnk.
For Each wksLap In Worksheets

Ebben a sorban hatroztuk meg azt, hogy melyik gyjtemny elemeit vizsgljuk vgig. Ha egyszer szavakkal fogalmazzuk meg ezt a sort, akkor ez azt jelenti, hogy; Minden munkalapot wksLap vegynk kzbe az aktv munkafzet lapjai Worksheets kzl. Ezt meg is teszi a program. A ciklustest egyetlen utastsa az, amelyik kirja az ppen kzbe vett munkalap nevt az Immediate ablakba. A ciklust a Next wksLap sor zrja. Ennek az utastsnak a segtsgvel lpnk a gyjtemny kvetkez elemre. Termszetesen nem csak az aktv munkafzet lapjain lpkedhetnk vgig. Az in sz mgtt megadhatjuk azt is, hogy melyik munkafzet lapjaira vagyunk kvncsiak. Ezt a kvetkez lehet:
Sub For_Each_teszt_2() Dim wksLap As Worksheet For Each wksLap In Workbooks(1).Worksheets Debug.Print wksLap.Name Next wksLap End Sub

Egy korbbi (106. olal) feladatot is megoldhatunk ezzel a ciklussal. A For Next iterci ismertetsekor azt vizsgltuk, hogy egy szmokkal kitlttt tartomnyban hny olyan cella tallhat, amelyben hatnl nagyobb rtket rt a felhasznl. Ezt tegyk meg most is, de most hasznljuk a For Each ciklust!
Sub For_Each_Teszt_4() - llandk deklarlsa Const STR_OUT_CIM As String = "A kisebbek szma!" Const STR_OUT As String = " db kisebb szm volt, mint " Const INT_HATAR As Integer = 6 - Vltozk deklarlsa CD mellklet 09 Fejezet
Vezerlesek_4.xls

109

Visual Basic for Application


Dim rngCella As Range Dim rngTartomany As Range Dim bytKisebbek As Byte Set rngTartomany = Range("C3:E9") - Kezdeti rtkads, adatbekrs s feldolgozs bytKisebbek = 0 For Each rngCella In rngTartomany.Cells If rngCella.Value > INT_HATAR Then bytKisebbek = bytKisebbek + 1 End If Next rngCella - Eredmny kirsa MsgBox bytKisebbek & STR_OUT & INT_HATAR End Sub

2. rsz

Az els megoldshoz kpest msknt lpkednk vgig a tartomny cellin. Az rngCella objektumvltoz lesz a ciklusszmll. Az rngTartomany annak a tartomnynak a hivatkozsa, amely cellin vgig fogunk lpkedni. Brmelyik tartomnyban tallunk majd egy Cells gyjtemnyt. A gyjtemny elemei a tartomnyon belli cellk. Ezt a ciklus els sorban tadjuk a ciklusszmllnak. Ha a program belp a ciklusba egyenknt vgiglp a gyjtemny minden elemn, vagyis ismtlsenknt ms-ms cellra fog hivatkozni. A ciklustesten ugyanazt a mdszert hasznljuk a tartalom ellenrzsre, mint az els megoldsban. Miutn vgigjrtuk az sszes cellt kirjuk az eredmnyt.

Do... Loop iterci


Do Loop
A ciklus futsa kzben vizsgljuk meg azt, hogy szksg van-e mg az utastsok ismtlsre.

Nem mindig ltszik elre, hogy hny eleme lesz annak a tmbnek, mit fel kell dolgoznunk. Ilyenkor a tmbbe rt rtkeket kell figyelnnk. A ciklust mindaddig kell ismtelgetni, amg a vrt rtket meg nem kapjuk. Erre a hasznlhatjuk a Do-Loop utasts-prral megvalsthat ciklust. Ebben az esetben nem tudjuk elre, hogy hny ismtlsre van szksg. Ebben az iterciban ciklus tpusban addig hajtjuk vgre a ciklus belsejben felsorolt utastsokat, amg egy meghatrozott felttel nem teljesl. Vagyis amg olyan adat nem rkezik, ami arrl tjkoztat, hogy elg az ismtlsbl. Ennek megfelelen nem tudjuk elre, hogy hnyszor hajtjuk vgre a ciklust, mivel elre nem lthat, hogy hnyadik ismtls hatsra teljesl a meghatrozott felttel. Ennek a ciklusnak a bemutatsa sorn mindenkppen beszlnnk kell a ciklusutastsok csoportostsrl is. Mgpedig a szerint, hogy a ciklus elejn, vagy vgn kerl-e ellenrzsre a felttel. Ha a ciklus elejn tesztelnk,

110

9. fejezet

Programvezrl utastsok

akkor ell-tesztel ciklusrl beszlnk, ha a vgn, akkor htul-tesztel ciklusrl van sz. Ez azrt rdekes, mert lesznek olyan ciklusok, melyek utastsait legalbb egyszer vgre kell hajtanunk. Ilyenkor htul tesztel ciklust runk a programba. Ha van olyan felttel, aminek hatsra a ciklusba rt parancsokat egyszer sem kell vgrehajtani, akkor a ciklus belpsi sorban kell megvizsglnunk a felttel teljeslst. A vgrehajts ezutn a teszt eredmnytl fgg, s lehet, hogy egyszer sem kerl sor a ciklus utastsainak a vgrehajtsra.. A Do Loop ciklusszervezs legegyszerbb formja, amikor sem ell, sem htul nem tesztelnk. Ennek gyakorlati haszna nincs, mivel ez egy vgtelen ciklust eredmnyez. Illetve ha megszegjk a strukturlt programozs szablyait, akkor kilphetnk a ciklusbl az Exit Do utastssal, de ezt most rgtn felejtsk is el. Nzzk meg az ell tesztel rsmdot. Ebben az esetben a Do parancs mgtt hatrozzuk meg a felttel vizsglatt. Ez a kvetkez lehet:
Do While logikai_kifejezes .... utastsok .... Loop
Elltestzetl cilus
Ha a ciklus els utastsa tartalmazza a vizsglatot, akoe az elltesztel

A felttel egy logikai kifejezs, ami mint azt mr olvastuk az opertorokrl szl rszben vagy True vagy False eredmnyt adhat. A While kulcssz hasznlatval mindaddig megismteljk a ciklusba rt utastsokat, amg a kifejezs rtke True. Ellenkez esetben tlpnk a Loop utastst kvet sorra. A msik ell-tesztel ciklusszervezs esetn pp ellenkezleg, addig ismteljk a ciklus utastsait, amg a logikai kifejezs rtke False. Ehhez a While kulcsszt Until-ra kell felcserlnnk, gy:
Do Until logikai_kifejezes .... utastsok .... Loop

Ugyanezt az utastsprt hasznlhatjuk htul-tesztel ciklus megvalstsra is. Ebben az esetben a ciklustestet lezr Loop sorban kell meghatroznunk az ismtls felttelt. Ebben a sorban is hasznlhatjuk a While vagy az Until kulcsszavakat, melyek mkdse megegyezik az elzekben lertakkal.

111

Visual Basic for Application


Htultesztel ciklus
Ebben az esetban a ciklust lezr utast mellett vizsgljuk az ismtls felttelt.

2. rsz

Do .... utastsok .... Loop While logikai_kifejezes

vagy
Do .... utastsok .... Loop Until logikai_kifejezes

Mivel ebben az esetben a ciklustest vgn hajtjuk vgre az ellenrzst, a ciklusba rt utastsok legalbb egyszer felttel nlkl vgrehajtsra kerlnek. Ha az utastssor vgre rve nem teljesl az ismtls felttele, akkor a Loop utni utastssal folytatjuk a program vgrehajtst, ellenkez esetben visszalpnk a Do sort kvet utastsra.

A Do Loop alkalmazsa
Nzznk egy egyszer pldt! rjunk egy eljrst, amelyik kitall egy szmot, amit mi nem tudunk. A program felhasznljnak az lesz a feladata, hogy akrmennyi prblkozssal, de tallja ki a program ltal gondolt szmot. Szemmel lthat, hogy ebben az esetben nem tudhatjuk elre, hogy a felhasznl hny prblkozsbl tallja el a kvnt rtket. gy azt sem tudjuk elre, hogy hnyszor kell megismtelni az adatbekrst. Ha szerencss kez a felhasznl, aki a program eltt l, elsre is eltallhatja, ha nagyon gyetlen, akr tbb vet is prblkozhat, mire megtallja a kigondolt szmot. Eredmnyl rassuk ki, hogy hnyszor tippelt a felhasznl.
CD mellklet 09 Fejezet
Vezerlesek_5.xls

Sub Loop_teszt_1() - llandk deklarlsa Const STR_IN_KERDES As String = _ "Tippeljen! Melyik szmra gondoltam?" Const STR_CIM As String = "Jtk" Const STR_OUT_START As String = "n " Const STR_OUT_END As String = " alkalommal tippelt!" - Vltzk deklarlsa Dim bytGondoltSzam As Byte Dim bytTipp As Byte

112

9. fejezet

Programvezrl utastsok

Dim lngTippSzam As Long - Kezdeti rtkeds lngTippSzam = 0 bytGondoltSzam = Int(Rnd(1) * 10) + 1 Do - Adatbekrs bytTipp = InputBox(STR_IN_KERDES, STR_CIM, bytGondoltSzam) - Feldolgozs lngTippSzam = lngTippSzam + 1 Loop Until bytGondoltSzam = bytTipp Eredmny kirsa MsgBox STR_OUT_START & lngTippSzam & STR_OUT_END, , STR_CIM End Sub

A bytGondoltSzam vltozban troljuk azt az rtket, amit a program vletlen szmknt kitallt. Az bytTipp vltozt arra felhasznljuk, hogy a jtkos ltal megadott tippet egy szmot megrizzk. A ciklust mindaddig ismteljk, amg a Loop utasts mg rt felttel eredmnye False, vagyis amg a kt szm nem egyezik egymssal. rdemes felfigyelni arra is, hogy ebben a feladatban mind az adatbekrs mind a feldolgozs a ciklusban trtnik. Ez gy helynval, hiszen a megadott rtkeket nem kvnjuk megrizni. A kapott adatot azonnal feldolgozzuk. Ez mg megfelel a strukturlt programozs elvrsainak is.

sszefoglals
Az elovasott fejezetbl kiderl, hogy a programok rsa sorn hromfle utastst hasznlunk. Az egyik utastscsoport a krnyezeti vltozk rtktl fggetkenl kerl vgrehajtsra. Ezeket szekvencia utastsoknak nevezzk. A msik kt utastscsoport a krnyezeti vltozk rtktl fggen hajtanak vgre utastssorokat. Ezek kzl az egyik csoport elre meghatrozott felttelektl fggen klnbz utastssorokat hajtanak vgre. Ezeket szelekcinak nevezzk.Vagyis a feltteleknek megfelelen szelektlnak vlasztanak az utastssorok vgrehajtsban. A msik csoport segtsgvel azokat a megfogalmazott gondolatokat valsthatjuk meg, mint pldul az utastsblokkot ngyszer ismteld meg, vagy az utastsblokkot addig kell ismtelni, mg el nem rjk a a kvnt eredmnyt. A programnyelvtl fggetlenl minden nyelven ebbe a hrom kategriba sorolhatjuk az utastsokat.

113

10. fejezet

Visual Basic eljrsok

isual Basicben a program utastsait eljrsokba rjuk. Az eljrs tbb utastsbl ll s egy-egy jl krlhatrolhat feladatot oldhatunk meg egy-egy eljrssal. Az eljrsoknak a feladatuktl fggen tbb fajtja van. A programban lesznek olyan eljrsok, amelyeket mi hozunk ltre, s lesznek olyanok, amelyeket a program knl fel neknk. Ebben a fejezetben ismerkedjnk meg azokkal az eljrs fajtkkal, amelyeket mi hozhatunk ltre. A fejezet fbb krdsei: w w w w Milyen eljrsokat lehetnek a programokban? Mi az a szubrutin? Milyen eljrs a fggvny? Hogy s hol hasznlhatjuk a fggvnyeket, eljrsokat?

Az eljrsok
A Visual Basic nyelvben az eljrsoknak sok fajtja van. A programban hasznlhatunk egyszer eljrsokat, fggvnyeket, esemnyvezrelt eljrsokat s az osztlymodulokba rhatunk tulajdonsg eljrsokat. Eddig is hasznltunk eljrsokat, amikor az elz fejezetben kiprbltuk a vezrlseket. St a vltozkrl szl fejezetben mg azt is lthattuk, hogy lehet adatokat tadni egy eljrsnak. A vltozkrl szl fejezetben mr rtunk szubrutint. Most ezeket az ismereteket foglaljuk ssze. Az eljrsok szerkezett is rdemes gy kialaktani, hogy azok az esetleges ksbbi program-mdostsok idejn ttekinthetek legyenek. Az eljrst kezdjk az eljrs szint vltozk s lladk deklarlsval, majd folytassuk az utastsok lersval. Az eljrs minden esetben a Sub kulcsszval kezddik, amivel egy sorban meghatrozzuk az eljrs nevt. Az eljrst az End Sub utastssal zrjuk le.

115

Visual Basic for Application

2. rsz

Az eljrsokon kvl csak az Option, valamint az alkalmazs vagy modul szint llandk s vltozk deklarlsra szolgl utastsok llhatnak. Minden ms utastst Sub s End Sub utasts-pr kz kell rnunk.

Szubrutinok
A programba rt eljrsokat gy hasznlhatjuk, mint a program utastsait. Amikor egy korbban elksztett eljrst hasznlunk a programban, azt szubrutinhvsnak nevezzk. A ltrehozott eljrsokat a hatkrkn bell meghvhatjuk, vagyis nll utastsknt vgrehajthatjuk. Az eljrsra, a nevvel hivatkozhatunk. Ez egyben azt is jelenti, hogy minden megrt eljrs mg az esemnyvezrelt eljrsok is meghvhatk, szubrutinnak hasznlhatk. A szubrutinokban kls a szubrutinon kvli adatokat is feldolgozhatunk. Ilyen esetben t kell adnunk a feldolgozand adatokat az eljrsnak szubrutinnak. Ha adatot szeretnnk tadni, akkor az eljrs neve mgtti zrjelpr kztt deklarlhatjuk az tadsra sznt adatokat. De ezt mr megismerhettk a vltozk deklarlsrl szl fejezetben.

Fggvnyek
A fggvnyek olyan eljrsok, amelyek egy rtket adnak vissza. Vagyis amikor lefuttatatunk egy fggvnyt, akkor a futs eredmnye egy visszaadott rtk. A fggvny meghatrozs kulcsszava a Function. A fggvnynek is lehetnek argumentumai. Ezeket ugyangy, a fggvnynv mgtti zrjelprban hatrozzuk meg. Itt is adhatunk t opcionlis vagy tmb argumentumokat, mint a szubrutin esetn.
CD mellklet 10 Fejezet
Fuggveny.xls

Function Osszead(sngA As Single, sngB As Single) As Single Osszead = sngA + sngB End Function

Az eredmny visszaadsra a fggvny nevt hasznljuk. Teht a fggvny neve nmaga is egy vltoz. Ennek megfelelen meghatrozhatjuk az adattpust is. A fggvny adattpust az argumentumok zrjeln kvl adhatjuk meg. A fggvny eredmnyt gy hozhatjuk a klvilg tudomsra, hogy a fggvny eljrson bell rtket adunk a fggvnynv vltoznak.
Function Osszead(sngA As Single, sngB As Single) As Single Osszead = sngA + sngB End Function

116

10. fejezet

Visual Basic eljrsok

24. bra: A fggvnyeket a munkalapokon is hasznlhatjuk A fggvny hasznlata w A fggvnyt gy hasznlhatjuk fel, hogy egy vltoznak rtket adunk. Az sszead fggvny felhasznlsra plda a kvetkez kis eljrs:
Sub OsszegHaszn Dim sngC as Single sngC = Osszead(25.456, 781.452) Debug.Print sngC End Sub

117

Visual Basic for Application

2. rsz

A fggvny hasznlta sorn az argumentumokat zrjelek kztt soroljuk fel. Az Excel-ben a megrt fggvnyeinket akr a munkalapokon is hasznlhatjuk. A ltrehozott fggvnyek bekerlnek az Excel fggvnylistjba. Az ltalunk rt fggvnyek mindaddig szerepelni fognak a munkalap fggvnyek kztt, amg az ket tartalmaz munkafzet nyitva van. Nyissunk egy j munkafzetet, s kapcsoljuk be a VBE-t. A megnyitott fzetbe illessznk bele egy ltalnos modult. Ebbe a modulba rjuk bele az elbbi fggvnyt. Miutn ezt megtettk, kapcsoljunk vissza az Excelbe, s vegyk hasznlatba ezt az egyszer kis fggvnyt (117. oldal 24. bra). Eljrsok hatkre w Hasonlan a vltozkhoz az eljrsoknak s fggvnyeknek is van hatkrk. Az eljrsok hatkrvel azt szablyozhatjuk, hogy az adott eljrst honnan lehessen meghvni. Az ltalnos modulba rt eljrsok s fggvnyek alaprtelmezett hatkre az aktulis alkalmazs. Vagyis Public parancs nlkl az egsz projektben hasznlhatjuk a fggvnyt vagy eljrst. Ha szkteni szeretnnk a hatkrt, akkor a Sub vagy Function kulcssz el rjuk be a Private szt. Az elz sszegz fggvny esetn ezt gy kell rni:
Private Function Osszead(sngA As Single, sngB As Single) As Single Osszead = sngA + sngB End Function

Statikus eljrsok w A vltozkrl szl rszben mr beszltnk a statikus vltozkrl. A statikus eljrsban deklarlt sszes vltoz statikus lesz. Ennek megfelelen a statikus eljrsban egyetlen vltoz el sem kell bernunk a Static kulcsszt, hiszen enlkl is megtartjk az rtkket az eljrs tbbszri meghvsakor.

118

11. fejezet

A programok finomtsa

gy-egy program a legkrltekintbb tervezs mellett is lehet hibs. A legnehezebb feladat megtallni azokat a hibkat, amelyeket mi okoztunk. A Visual Basic krnyezet sok hibt automatikusan szlel, s figyelmeztet r. Csak gondoljunk az Option Explicit parancs hasznlatra, vagy arra a hibajelzsre, ha egy-egy parancsot nem megfelelen rtunk le s a piross vltozott, amint kilptnk az adott sorbl. A hibk egy msik csoportja addhat abbl, hogy rosszul talltuk ki a program algoritmust. Ilyenkor gy tnik, minden rendben van. Nem jelzi, hogy nem deklarltunk vltozt, vagy elrtunk valamit, de az eredmny mgsem az, amit elvrtunk az eljrstl. Mivel a Visual Basic nem jelzi a hibt, ezeket a legnehezebb megtallni. A fejleszti krnyezetek pp ezrt rendelkeznek olyan eszkzkkel, amelyekkel nyomon tudjuk kvetni a programok futst. Tegyk fel a kvetkez krdseket: w Hogyan lehet egy eljrst lpsenknt vgrehajtani? w Hogy llthatjuk meg az eljrst futs kzben? w Hogy vizsglhatjuk meg a vltozk tartalmt?

A program vgrehajtsa lpsenknt


Kisebb programok esetn jl hasznlhat mdszer, ha lpsenknt hajtjuk vgre az elksztett eljrst. Az eljrs, amit lpsenknt hajtunk vgre, olyan legyen, ami az ppen aktulis adattartomny minden celljt vgigolvassa s a vgn kirja a tartomny legkisebb rtkt. Valahogy gy:
Sub MinimumKeres() Const STR_MSG_1 As String = " A legkisebb szm a(z) " Const STR_MSG_2 As String = " amelyik a(z) " Const STR_MSG_3 As String = " cellban van." Dim dblTemp As Double
CD mellklet 11 Fejezet
Finomitas.xls

119

Visual Basic for Application


Dim dblMin As Double Dim strCime As String Dim rngTart As Range dblMin = Selection.CurrentRegion.Cells(1) For Each rngTart In Selection.CurrentRegion dblTemp = rngTart.Value If dblTemp < dblMin Then dblMin = dblTemp strCime = rngTart.Address End If Next rngTart Range(strCime).Select MsgBox STR_MSG_1 & dblMin & STR_MSG_2 & strCime & STR_MSG_3 End Sub

2. rsz

Az eljrs, mint eddig mindig, az llandk s a vltozk deklarlsval kezddik. A dblMin vltoz feladata, hogy az eljrs vgn ebben a vltozban megjelenjen a tartomny legkisebb rtke. A dblTemp vltoz az adatok tmeneti trolsra szolgl.
dblMin = Selection.CurrentRegion.Cells(1)

A legels rtk, amit minimumknt trolunk, az aktulis tartomny els cellja. Ezt az rtket az aktv tartomny brmelyik celljbl vehetnnk, de kzenfekv a tartomny els celljt felhasznlni. gy akr olyan tartomny esetn is felhasznlhatjuk az eljrsunkat, amelyik egyetlen cellbl ll. Ksbb, ha a tartomnyban tallunk ennl kisebb rtket, akkor azzal lecserljk ezt az rtket.
For Each rngTart In Selection.CurrentRegion dblTemp = rngTart.Value If dblTemp < dblMin Then dblMin = dblTemp strCime = rngTart.Address End If Next rngTart

A For Each ciklus hasznlatval vgiglpkednk a tartomny cellin. A ciklus els utastsa a dblTemp vltozba rja az aktulis cella tartalmt. Ezutn, megvizsgljuk, hogy a jelenlegi cella tartalma kisebb-e, mint a minimumknt trolt rtk. Ha igen, akkor ki kell cserlnnk a korbbi minimumot, hiszen ez kisebb, mint amit korbban troltunk. A kvetkez lpsben mg annak a cellnak a cmt is megjegyezzk, ahol ezt

120

11. fejezet

A programok finomtsa

az rtket talltuk. Ezt a strCime vltozban troljuk. A cm egy szveg, ezrt ezt egy szveg tpus vltozban rizhetjk meg.

25. bra: Ksztsnk el adatoakt az eljrshoz


MsgBox STR_MSG_1 & dblMin & STR_MSG_2 & strCime & STR_MSG_3

Az eljrs utols lpse az eredmny kiratsa. Ezt az eredmnyekbl s a deklarcis rszben trolt llandkbl lltjuk ssze. A megnyitott munkafzetben lljunk a tartomny egyik celljra. Az eredmny ellenrzsre egy kiss tvolabbi cellba, munkalap fggvny segtsgvel keressk meg a minimum rtket. Ezutn kapcsoljunk vissza a VBE-be s indtsuk el az eljrsunkat. Most futtassuk le ugyanezt az eljrst lpsenknt. Ismt az eljrs els sorra llunk s kivlasztjuk a Debug Step Into utastst vagy letjk az F8-as funkcibillentyt. Ennek az lesz az eredmnye, hogy a Sub sort tartalmaz utastssort az Excel srga sznnel kiemeli. A kvetkez lps vgrehajtshoz ismt vlasszuk ki a Step Into utastst. Egyszerbb a tovbblps az F8-as billentyvel, mert ha minden lpsnl le kell nyitni a ment, akkor kicsit nehzkes lesz a vgre jutni egy hosszabb eljrsnak. A VBA azt az utastst, amelyiket ppen megjellte a srga szn kiemelssel mg nem hajtotta vgre. Ismt ssk le az F8-as billentyt. Most lljunk meg egy rvid idre, s kicsit vizsgljuk meg azt az utastst, amelyiken mr tljutottunk. Egyszeren hzzuk az egrmutatt a dblMin vltoz fl (122. oldal 26. bra). Kis id mlva a vltoz alatt megjelenik annak pillanatnyi rtke. Ezt kiprblhatjuk olyan vltozk esetn is, melyeknek mg nem adtunk rtket.

121

Visual Basic for Application

2. rsz

26. bra: Ha az egrmutatt a vltoz fl hzzuk, megjelenk a tartalma Ha tovbb lpkednk az eljrsban, nyomon kvethetjk a ciklus s az elgazs vgrehajtst is. Itt ismt megvizsglhatjuk a vltozk pillanatnyi rtkt, s az elemzs eredmnyt felhasznlhatjuk a program kijavtsra.

Trspont elhelyezse
Nagyobb eljrsok esetn hosszadalmas lenne vgiglpkedni az utastsokon. Lehet ugyanis, hogy gyanakszunk a program valamelyik rszre s ez a rsz nem az eljrs elejn tallhat. Ilyenkor a jnak tlt utastsok fltt nem kell megllnunk. Ha egy korbban elksztett munkalap fggvnyben keressk a hibs rszt, akkor nem is tudjuk elindtani a fggvnyt lpsenknt. Ilyenkor is hasznos, ha a programot egy megfelel ponton lelltjuk s esetleg innen haladunk tovbb lpsenknt.

27. bra: Trspont elhelyezse az eljrsban

122

11. fejezet

A programok finomtsa

Helyezznk el trspontot az If utastst tartalmaz sornl (27. bra). Ennek tbb mdja is van. Az egyik, amikor rllunk arra az utastsra, amelyiknl szeretnnk meglltani a programot s kivlasztjuk a Debug Toggle Breakpoint utastst vagy letjk az ezzel egyenrtk F9-es funkci billentyt. Van egy msik mdszer, ami mg ennl is egyszerbb. Ezt az egrrel valsthatjuk meg, mgpedig gy, hogy a modul bal szln tallhat szrke svra kattintunk az eltt a programsor eltt, ahol trspontra van szksgnk. A trspont elhelyezse utn indtsuk el az eljrst (F5-s funkci billenty). Ahnyszor a trsponttal jellt sort kell vgrehajtania a programnak, megll. Lehetsgnk van a vltozk tartalmnak ellenrzsre. Ennek az ellenrzsnek a segtsgvel mg azt is megtudhatjuk, hogy a program egyltaln rlp-e a kivlasztott utastssorra. Ha nem, megvizsglhatjuk a program, algoritmust, vagy a vltozkat. A trsponttl akr lpsenknt folytathatjuk az eljrs vgrehajtst.

Vltozk figyelse
A vltozkat kln ablakban is megjelenthetjk. Hajtsuk vgre a 28. bra rajzn lthat lpseket. Ha ezek utn lpsenknt hajtjuk vgre az eljrs utastsait, akkor a kivlasztott vltoz mindegyik vltozst megfigyelhetjk.

28. bra: Vltoz elhelyezse a figyel ablakban

123

Visual Basic for Application

2. rsz

1. Kattintsunk az egrrel abba a vltozba, amelyiket szeretnnk megfigyelni. 2. Hajtsuk vgre a Debug Quick Watch parancsot. 3. A mvelet eredmnyeknt megnylik a Watches ablak. 4. A Watches ablakban megjelennek a kiszemelt vltoz jellemzi. A Watches ablakban ngy oszlopot tallunk. Az els oszlop a Expression. Ebben az oszlopban a vltoz nevt olvashatjuk. A msodik oszlop Value a vltoz rtkt mutatja meg. Ez az oszlop megmutatja azt is, hogy a vltoz hatskre jelenleg rvnyes-e vagy nem. Addig, amg a vltoz hatkrn kvli utastsokat hajtunk vgre, az Value oszlopban az Out of context szveg jelenik meg. A harmadik oszlop a vltoz tpust jelzi. Mivel a eljrst nem kezdtk el vgrehajtani, gy mg nincs deklarlva a kivlasztott vltoz. Ezrt itt az Empty res szveg olvashat. A negyedik oszlop a vltoz hatkrt mutatja meg. Ez jelenleg a Module1-es modul MinimumKeres eljrsa. Ez a mi esetnkben a Modul1-es modul, azon bell pedig a MinimumKeres eljrs. Ha a programot meglltjuk valahol, akkor itt a Watches ablakban mindig azt az rtket fogjuk ltni, amit ppen a vltoz felvett. Utna szmolhatunk az adott rtknek, vagy ha szksgt ltjuk t is rhatjuk. Csak r kell kattintani a Value rtkre az egrrel, s trhatjuk.

Kifejezsek figyelse, feltteles megszakts


Sok esetben nem egyszeren a vltoz rtke a hiba oka, hanem a tbb vltozbl szmtott helytelen rtk. Ennek a megfigyelsre is lehetsgnk van. A kifejezseket a fordt kirtkeli. Ennek segtsgvel feltteles megszaktsokat is meghatrozhatunk. Msknt fogalmazva meghatrozhatjuk, hogy a program akkor lljon le megszaktssal, amikor valamelyik vltoz felvesz egy rtket. lltsunk be olyan feltteles trspontot, ami akkor lltja le eljrsunkat, amikor a dblTemp vltoz rtke megvltozik. Ehhez az Expression dobozban a dblTemp vltoznak kell szerepelnie s a Break When Value Changes vlasztt kell bekapcsolnunk. Ha ezek utn elindtjuk az eljrst, akkor a program csak abban az esetben ll le, ha a dblTemp vltoz rtke megvltozott. Figyeljk meg azt is, hogy a Watches listban ez eltt a figyels eltt ms a rajz. Most lltsunk be egy olyan figyelpontot, amelyik akkor szaktja meg a program futst, amikor a dblMin pillanatnyi rtke kisebb, mint a dblTemp. Ehhez a kifejezs dobozba rjuk be a dblMin < dblTemp kifejezst s kapcsoljuk be a Trspont, ha az rtk IGAZ kapcsolt.

124

11. fejezet

A programok finomtsa

29. bra: A figyelpont szerkesztse w Ha egy figyelpont belltsn vltoztatni szeretnnk, akkor jelljk ki a figyelablak listjbl s a helyi menbl a Edit Wach utastst. A megjelen panelben megvltoztathatjuk a belltsokat. A figyelpont trlse w Ha az egyik vagy msik figyelpontra tovbb nincs szksgnk, akkor jelljk ki a figyelsek segdablakban a feleslegess vlt elemet s ssk le a billentyzet DELETE gombjt. Ha megfigyelseinket befejeztk, akkor bezrhatjuk a figyelablakot az ablak jobb fels sarkban tallhat x gombbal. A figyelablak lezrsa utn is megll a program, ha vannak belltott felttelek. Teht szntessk meg a figyelpontokat s kapcsoljuk ki a figyelsek ablakot. A kvetkez rszben mr nem lesz r szksgnk.

Helyi vltozk megfigyelse


Az egyes eljrsokban llandkat, vltozkat s objektumokat hasznlunk. Ezeket egyszerre is megfigyelhetjk a helyi ablak segtsgvel. Ez egy kicsit eltr az elz figyelsektl, mert nem mi vlasztjuk ki a megfigyelni kvnt elemeket. Cserbe azonban nemcsak a vltozk rtkt lthatjuk, hanem az eljrsban hasznlt objektumok llapotrl is adatokat kaphatunk. Ezt az ablakot a View Locals Window utastssal kapcsolhatjuk be. A helyi ablak bekapcsolsa utn helyezznk el egy trspontot az eljrsunknak abban a sorban, ahol az End If utasts van. Ezutn indtsuk el az eljrst. Amikor a trspontra lpnk, akkor nzzk meg a helyi ablakot.

125

Visual Basic for Application

2. rsz

30. bra: A Local Window tartalma Ebben az ablakban megvltoztathatjuk az objektumok tulajdonsgt vagy a vltozk rtkt. Erre akkor lehet szksgnk, ha a megfigyels sorn gy ltjuk, hogy a programlpsek eredmnyeknt nem kvetkezik be olyan llapot, amit vrtunk. Ugyanezzel a mdszerrel a figyelablakban is lhettnk, ott azonban csak a megfigyels alatt ll vltozk rtkt vltoztathatjuk meg. rdemes megjegyezni, hogy az objektumoknak vannak olyan tulajdonsgai, amelyeket csak olvasni lehet. Termszetesen ezeket itt sem mdosthatjuk. Miutn megismertk ezt a megfigyelsi lehetsget zrjuk le a Local Window segdablakot.
CD mellklet 11 Fejezet
Finomitas.xls

31. bra: Az Immediate ablakban kzvetlen parancsokat adhatunk ki

126

11. fejezet

A programok finomtsa

A prba ablak hasznlata


A prba ablakbl elindthatunk egy korbban mr megrt eljrst. Ezt prbljuk is ki. Kapcsoljuk be a prbaablakot a View Immediate Window utastssal. Indtsuk el az elksztett eljrst (31. bra). Ennek akkor vehetjk nagy hasznt, ha sok eljrst tartalmaz a programunk. A prba ablakban kiprblhatjuk az utastsokat. Egyszerre egy sornyi utastst rhatunk be s prblhatunk ki. Kirathatjuk az egyes objektumok tulajdonsgt, vgrehajthatjuk az objektumok metdusait. Ezt a lehetsget hasznljuk fel az objektumok bemutatsrl szl fejezetben. A program futsa kzben kirathatjuk a vltozk rtkt. Ehhez a Debug objektumot kell hasznlnunk a programban. Ez egy vagy tbb j utastssort jelent, melyeket be kell rnunk az eljrs sorai kz. Ennek az objektumnak egyetlen metdust hasznlhatjuk. Ez a Print metdus. Vlasszuk ki a programunkban azt az utastssort, amelyik utn a vltozk rtkt szeretnnk megjelenteni s rjuk be a kvetkezket:

32. bra: A program futsa kzbe kiirathatjuk a vltozk tartalmt A vltozk vagy objektumok tulajdonsgt az eljrs brmelyik pontjrl kilistzhatjuk. Az zenetben szvegllandkat is hasznlhatunk, amelyek segtsgvel a lista olvasst tehetjk egyszerbb. A Debug objektumban van mg egy lehetsg a program vltozinak az ellenrzsre. Tegyk fel, hogy ugyanezen a helyen azt szeretnnk megtudni, hogy mikor azonos a kt vltoz tartalma. Erre a az Assert eljrst hasznljuk. Ha az Assert utn bert logikai kifejezs rtke hamis lesz,

127

Visual Basic for Application

2. rsz

akkor lell a program. Ez hasonl, mint az Add Watch-ba rt kifejezs. Az elz Debug.Print sor utn rjuk be a kvetkez parancsot:
Debug.Assert dblTemp <> dblMin

Azrt nem egyenlsgjelet tettnk a kt vltoz kz, mert gy pont akkor lesz False az rtk, ha azok tartalma megegyezik. Tovbbi kirsi lehetsgek w Termszetesen a tulajdonsgok vagy vltozk rtkt az MsgBox utasts segtsgvel is megjelenthetjk. Ennek egyetlen htrnya, hogy amg az zenet ltszik, nem frnk hozz mshoz, mint az zenet panelhez. Msik lehetsg az, amikor a kivlasztott rtkeket a munkalap valamelyik celljba ratjuk ki. Erre a Cells vagy Range objektumot hasznlhatjuk fel.

sszegezve
Ha a program mkdse nem pontosan egyezik meg az elgondolsunkkal elemezzk ki a futst lpsenknt, vagy lljunk meg a megfelel helyen, s vizsgljuk meg a vltozk tartalmt. Ha szksges, futs kzben mdostsuk is.

128

Az Excel objektumai

3. Rsz

A 3. rsz tartalmbl
Ebben a rszben az Excel objektumainak a megismerst tzzk ki clul. Olyan eszkzket ismernk meg, amelyek segtsgvel megszerezhetjk az Excel programozshoz szksges tudst. Makrt ksztnk felvtellel, majd utna kielemezzk a felvett eljrsokat. Ksbb az Immediate ablakban kiadott parancsokkal folytatjuk az objektumok s metdusok megismerst. Ezekkel a mdszerekkel megtanulhatjuk az Excel objektumok tulajdonsgainak s metdusainak a kezelst.

13. fejezet

Ismerkeds a tulajdonsgokkal
z Excel objektumok megismersre j mdszer, hogy az Immediate ablakban kiadott parancsok hatst megfigyeljk. Azt mr olvastuk a Visual Basic Editor-rl szl fejezetben, hogy az Immediate ablakban kiadott utastsok azonnal vgrehajtsra kerlnek. Ebben a fejezetben ezt az eszkzt fogjuk felhasznlni arra, hogy az Excel egyik, msik objektumt felfedezzk. Figyeljk meg, hogy azoknak a tulajdonsgoknak s metdusoknak a neve, amelyek tbb objektumban is elfordulnak, azonos a nevk. A fejezet fbb krdsei: w Hogyan vltoztathatjuk meg egy-egy objektum tulajdonsgait? w Hogyan ismerkedhetnk meg az egyes objektumok hasznlatval?

33. bra: Rendezzk el az Excel s a VBE ablakait gy 131

Az Excel objektumai

3. rsz

Tltsk be az Excelt s kapcsoljuk be a Visual Basic Editor-t. A megjelentst lltsuk be gy, hogy a httrben lthat legyen az Excel program (131.oldal 33.bra). Ehhez zrjuk le mind a projekt ablakot, mind pedig a tulajdonsg Properties ablakot. Ezt gy tehetjk meg, hogy a segdablakok jobb fels sarkban tallhat x-re kattintunk. Kapcsoljuk be az Immediate ablakot. Ezt a View Immediate Window utasts vgrehajtsval tehetjk meg. Ha ebbe az ablakba berunk egy utastst, akkor amint letjk az ENTER billentyt, az Excel azonnal vgrehajtja azt az utastst, amit bertunk. A mr bert utastsokat tbbszr is vgrehajthatjuk, ha az utasts sorba llva ismt letjk az ENTER-t. A Visual Basic szerkeszt ablakt vegyk kisebbre, gy, hogy a httrben jl megfigyelhessk mi trtnik az Excelben.

Excel objektumok
Ebben a fejezetben megismerkedhetnk nhny objektum egyik-msik tulajdonsgnak a belltsval s nhny metdussal. Megtanuljuk, hogy miknt lehet programbl j munkafzetet kezdeni, hogy lehet egy munkafzetbe j munkalapot beszrni tovbb, hogyan milyen mdszerekkel jellhetnk meg egy kiszemelt cellatartomnyt.

Az Excel mint objektum


Application
Ez az objektum maga az Excel alkalmazs.

Maga az Excel alkalmazs is objektum, gy program rsakor ennek tulajdonsgaihoz, metdusaihoz is hozzfrnk. Az objektum neve Application. Ennek a jellemzi olyan tulajdonsgok s metdusok, amelyek magra az Excel-re vonatkoznak. Most sem vesszk t az objektumler knyvek feladatt. tletszeren kiemelnk nhny objektumot, s annak egyik-msik tulajdonsgt, metdust kiprbljuk. A cl most nem az, hogy bemutassuk az Excel objektumait, inkbb az ismerkeds mdszert szeretnm tadni a Kedves Olvasnak. Ha valamelyik tulajdonsg rtkt szeretnnk megtudni, a sort kezdjk krdjellel. Figyeljk meg, hogy amint lerjuk a pontot az Application sz mg, megjelennek az objektum tulajdonsgai s metdusai (34. bra). A megjelen listbl kivlaszthatjuk azt, amelyiket ki szeretnnk prblni. Kezdjk azzal, hogy kiratjuk az alkalmazs nevt. rjuk be a kvetkez sort az Immediate ablakba:
?Application.name

Name
Ebbl a tulajdonsgbl tudhatjuk meg egy objektum nevt.

A vlasz az, hogy Microsoft Excel. Az objektumok Name tulajdonsga minden objektumnl a kivlasztott objektum nevt tartalmazza. A nv

132

13. fejezet

Ismerkeds a tulajdonsgokkal

tulajdonsg egyedi. Vagyis egy projekten bell nem hasznlhatjuk ktszer ugyanazt a nevet. A Nv tulajdonsg rtkt futsi idben nem lehet megvltoztatni. Az objektum felirata s a neve kt kln tulajdonsg. A felirat megvl-

34. bra: A tulajdonsg lista toztathat futsi idben is. A felirat tulajdonsg a Caption. Ilyen tulajdonsga az Excel-nek is van. Ez az ablak bal fels sarkban lthat. Jelenleg ez is a Microsoft Excel szveget tartalmazza, vagyis a program nevt. Ez azonban trhat. Elbb olvassuk ki, majd vltoztassuk meg!
?application.caption
Caption
rlapok, alkalmazsok, ablakok, parancsgombok feliratnak trolsra szolgl tulajdonsg.

Erre a kvetkez vlaszt kapjuk: Microsoft Excel - Munkafzet1. Azrt jelent meg a munkafzet neve is a vlaszban, mert a megnyitott munkafzet neve is megjelenik a program fejlcn, br az nem rsze a program nevnek. Ha a munkafzet nem tlttte volna ki az Excel ablak teljes fellett, akkor csak a Microsoft Excel szveg jelent volna meg. Vltoztassuk meg a program feliratt. rjuk be a kvetkez sort az Immediate ablakba:
application.caption = "Ez egy nagyszer tblzatkezel program!"

A fenti utasts eredmnyt a 134. oldalon lthat 36. bra szemllteti. Ha szeretnnk visszalltani az eredeti feliratot, adjuk ki a kvetkez parancsot:
application.caption = ""

133

Az Excel objektumai

3. rsz

36. bra: Az Excel alkalmazs cmcor tulajdonsga


Visible
Egy objektum lthatsgt llthatjuk be ennek a tulajdonsgnak a segtsgvel.

Szksg esetn elrejthetjk az Excel alkalmazst a program lezrsa nlkl. lltsuk be az Application objektum Visible tulajdonsgt False rtkre.
application.visible = false

Ne lepdjnk meg, az Excel eltnt, de nem zrtuk le. Ez abbl is ltszik, hogy a VBE mg hasznlhat. Jelljk ki a False sz s rjuk t True rtkre. Az ENTER gomb letse utn ismt megjelenik a program.

35. bra: Az Excel belltsai w Ebben az objektumban tallhatjuk meg az Excel belltsairt felels tulajdonsgokat is. Ha az Excel-ben kiadjuk az Eszkzk Belltsok menparancsot, megjelenik a bellts prbeszdpanel. Ezeket a

134

13. fejezet

Ismerkeds a tulajdonsgokkal

belltsokat is programozhatjuk. Pldul a megjelents fln tallhat belltsok azok, amelyek a Display szval kezddnek. Egyiket-msikat prbjuk ki! Az Immediate ablakban lltsuk be az rtkket False, majd True rtkre. Miutn tkapcsoltuk, program paranccsal a belltsokat, rdemes megnzni a Belltsok prbeszdpanelt. Az egyes belltsok eredmnyt krdezzk le az Immedate ablakban kiadott paranccsal. Pldul, kapcsoljuk ki az Ecxel llapotsort!
application.DisplayStatusBar=False

Ha a DisplayStatusBar tulajdonsg rtkt False-ra lltjuk, eltntethetjk az llapotsort. Ugyanezzel a paranccsal ismt megjelenthetjk, csak most True rtkre kell lltanunk. Szksg esetn le is krdezhetjk azt, hogy az llapotsor lthat-e.
?application.DisplayStatusBar

Ugyanezzel a mdszerrel rejthetjk el a szerkesztlcet, ha a DisplayFormulaBar tulajdonsg rtkt megvltoztatjuk. Tetszs szerint prbljunk ki nhny Display kezdet tulajdonsgot, figyeljk meg a hatsukat. Lekrdezhetjk az Excelhez tartoz fjl elrsi tvonalakat is. Egyetegyet prbljuk tlltani. Nem mindegyiket lehet! Ms szval ismerkedjnk a kvetkez tulajdonsgokkal.
?application.AltStartupPath ?application.DefaultFilePath ?application.LibraryPath ?application.Path ?application.StartupPath ?application.TemplatesPath ?application.UserLibraryPath ?application.DefaultSaveFormat ?application.RecentFiles.Count

Ha az Excel, vagy az opercis rendszer verzijt szeretnnk megtudni, arra a kvetkez tulajdonsgokat hasznljuk.
?application.Version ?application.OperatingSystem

Count
Count metdusa minden gyjtemnynek van. A segtgvel megszmllhatjuk a gyjtemnybe foglalt objektumokat.

A program felhasznl s a szervezet neveit krdezzk le a kvetkez parancssorokkal:

135

Az Excel objektumai
?application.OrganizationName ?application.UserName

3. rsz

Az Application objektumnak vannak olyan tulajdonsgai, amelyek objektumra vagy gyjtemnyre mutatnak. Ezek segtsgvel hivatkozhatunk a mindenkori aktv objektumokra. prbljuk ki a kvetkez nhny tulajdonsg hasznlatt:
application.ActiveCell = "Excel 2003" ?application.ActivePrinter ?application.ActiveWindow.Caption ?application.ActiveSheet.name ?application.ActiveWorkbook.Name

Mivel az Excel alkalmazsban adjuk ki a parancsokat, nem ktelez lerni az Application objektum nevt. Vagyis az elz utastsokat gy is rtelmezi a Visual Basic:
ActiveCell = "Excel 2003" ?ActivePrinter ?ActiveWindow.Caption ?ActiveSheet.name ?ActiveWorkbook.Name

Mg az Excel alkalmazst is bezrhatjuk programozottan. Adjuk ki a kvetkez parancsot:


Kilps a programbl
Az Application Quit metdusa lezrja az Excel alkalmazst.

application.quit

Tegyk meg, majd ismt indtsuk el az Excelt.

Munkafzet gyjtemny s objektumok


rdemes visszalapozni az objektum-diagramra. Ott megfigyelhettk, hogy az Application objektum alatt talljuk a Worksheets gyjtemnyt. Minden gyjtemnynek van Count metdusa! Ezzel megszmllhatjuk a gyjtemny elemeit. Ezt a metdust fogjuk felhasznlni arra, hogy megszmoljuk az alkalmazsban megnyitott munkafzeteket.
?application.workbooks.count

Count
Minden gyjtemnynek van Count metdusa. Ezzel a metdussal lekrdezhetjk, hogy hny eleme van a gyjtemnynek.

136

13. fejezet

Ismerkeds a tulajdonsgokkal

Mivel a munkafzetek abban az alkalmazsban vannak, amelyikben a parancsot kiadtuk, nem ktelez a hivatkozsban az Application objektumnak szerepelnie. Rvidebben lerva az elz utastst:
Add

?workbooks.Count

Vegynk fel jabb munkafzetet a gyjtemnybe! A gyjtemnyekbe az Add metdussal vehetnk fel jabb elemet. A munkafzetek gyjtemnyt is bvthetjk j elemmel. Az Add metdus eredmnye, ugyanaz, mint amikor Excel felhasznlknt j munkafzetet kezdnk.
workbooks.add

Az Add metdussal a gyjtemnybe jabb elemet vehetnk fel.

Figyeljk meg a Visual Basic Editor mgtt, az Excel alkalmazsban megjelent egy j res munkafzet. Vagyis a Workbooks gyjtemny eggyel tbb munkafzetbl fog llni. Ahnyszor ebbe a parancssorba llunk s letjk az ENTER-t, mindannyiszor egy j munkafzetet nyitunk. lljunk vissza abba a sorba, amelyikben megszmoltuk a munkafzeteket, s ismt szmoljuk meg. Ltni fogjuk a vltozst. Ha szeretnnk lezrni a munkafzeteket, hasznljuk a close metdust. Ha ezt a parancsot kiadjuk, az Excel lezrja az sszes megnyitott munkafzetet, mivel a Close most a Workbooks gyjtemnyre vontatozik.
workbooks.close

Close
Bezrhatjuk a munkafzetet. Ilyen metdusa minden bezrhat objektumnak van.

Ha ezt az utastst vgrehajtottuk, akkor lpjnk vissza az add metdust tartalmaz sorra, s a segtsgvel hozzunk ltre ngy vagy t munkafzetet. Figyelem a munkafzetek neve mr nem egytl kezddik. Munkafzet objektum w Most fordtsuk a figyelmnket a munkafzet objektum fel. Ez a Workbooks gyjtemny egy eleme. Kezdjk az ppen aktv munkafzettel. Erre az Activeworkbook hivatkozst hasznljuk. Ha elfelejtennk, megtalljuk az Application objektum tulajdonsgai kztt.
Activeworkbook.Close

Workbook
Ha a Workbooks gyjtemnynv mg rt zrjelek kztt meghatrozzuk a gyjtemny egy elemt, akkor egy Workbook objektumra hivatkozhatunk.

A Workbooks munkafzetek gyjtemny egyik tagjt zrjuk le ezzel az utastssal. Ez az elem az ppen kivlasztott, aktv munkafzet. Az ActiveWorkbook tulajdonsg a mindenkori aktv munkafzetet hatrozza meg. Vagyis a Workbooks objektumgyjtemny egyik elemvel vgznk mveletet.
?workbooks(1).name ?Activeworkbook.name

137

Az Excel objektumai

3. rsz

A Workbooks gyjtemny munkafzetekbl ll. Workbook objektumra gy hivatkozhatunk, hogy meghatrozzuk azt is, hogy a gyjtemny melyik elemvel hajtjuk vgre a mveletet. Erre a gyjtemny mg, zrjelek kz rt index meghatrozsval van lehetsgnk. Ezzel a Workbooks gyjtemny egyik elemt hatrozzuk meg, vagyis egy Workbook objektumot. A zrjelbe rt egyes azt a munkafzetet jelli meg, amelyiket idben a legkorbban nyitottuk meg. A Name tulajdonsg a munkafzet nevt trolja teht ez az utastssor, a megadott munkafzet nevt rja ki. Az aktv munkafzet nevt az ?Activeworkbook.name utastssal rathatjuk ki. Az aktv munkafzet s az elsknt megnyitottt munkafzet nem felttlenl ugyanaz.
workbooks("Munkafzet10").close

Activate
Az objektum, amelynek ezt a metdust hasznltuk aktulis objektum lesz.

A Workbooks gyjtemny egyik elemre az elem munkaftet nevvel is hivatkozhatunk. Ebben az esetben a munkafzet nevt idzjelek kz kell rnunk. Ha nem mkdik az utasts, akkor lehet, hogy nincs ilyen nvvel megnyitott munkafzet, hiszen az elbb mindet lezrtuk, gy a Munkafzet10-est is. Ha most is ezt prbljuk lezrni, akkor hibazenet jelenik meg. Ha egy mr elmentett munkafzetre szeretnnk a nevvel hivatkozni, akkor az idzjelek kz annak a fjlnak a nevt kell rnunk, amelyikbe elmentettk. Ilyenkor az XLS kiterjesztst is hozz kell venni a nvhez!
workbooks("Munkafzet12").activate

Saved
Ha a munkafzet betltse ta brmit megvltoztattunk, akkor az rtke False-ra vlt.

A Workbooks gyjtemny egyik elemt aktivlhatjuk. Ha szeretnnk programbl egy msik munkafzetet aktivlni, akkor erre hasznljuk az Activate metdust. Itt is igaz az elbb lert gondolat, miszerint a mr elmentett munkafzetre a fjlnvvel hivatkozhatunk.
?activeworkbook.saved

Amikor egy munkafzetben tartalmi vagy formai mdostst hajtunk vgre, akkor az alkalmazs belltja, hogy a munkafzetben vltoztattunk, de nem mentettk el a vltozsokat. Mivel mi mg semmit nem vltoztattunk a munkafzeten, ezrt a fenti krdsre Igaz (True) vlaszt kapunk.
activeworkbook.saved=false

Ha szksgt ltjuk, mi is bellthatjuk ezt a Saved tulajdonsgot. Ha ezutn megprbljuk lezrni a munkafzetet pldul az activework-

138

13. fejezet

Ismerkeds a tulajdonsgokkal

book.close utastssal, akkor a program figyelmeztetni fog arra, hogy szksg esetn mentsk el a munkafzetet.
Worksheets
Egy tetszleges munkafzet munkalapjait gyjti ssze.

Munkalapok gyjtemny s objektumok


A munkafzetben pillanatnyilag hasznlatban lv munkalapok (Worksheets) is gyjtemnyt alkotnak. Ismerkedjnk meg a munkalapokon vgezhet nhny mvelettel. Mivel az elz gyakorlatok sorn megnyitottunk s lezrtunk munkafzeteket, most az tnik a legjobb megoldsnak, ha lezrjuk az sszes munkafzetet s megnyitunk egy jat. Esetleg lpjnk ki az Excel-bl s indtsuk jra. Ez azrt j, mert akkor a munkafzetetek szmozsa ismt a Munkafzet1-el kezddik. Ha vgeztnk, szmoljuk meg hny lapja van az aktv munkafzetnek. Most is a gyjtemnynek Count metdust hasznljuk.
?worksheets.count

Vehetnk fel j lapokat a munkafzetbe? Igen! Melyik metdus hasznlatval? Az Add metdussal. Minden gyjtemnynek van Add metdusa? Teht most is a jl bevlt mdszerrel bvthetjk a gyjtemnynket j elemmel.
Worksheets.add

Az Add metdust mr hasznltuk a munkafzetek gyjtemny esetn. Most ugyanezt hasznlhatjuk a munkalapok gyjtemnyhez is. Az aktv munkafzethez ugyanezzel a mdszerrel adhatunk hozz egy j munkalapot. Ezzel az utastssal az aktulis munkafzet Worksheets gyjtemnyt bvtettk jabb munkalap WorkSheet objektummal. A kvetkez plda megrtshez kezdjnk mg kt j munkafzetet. Ezt a Workbooks.add utasts tbbszri vgrehajtsval tehetjk meg. Most a Munkafzet1 munkafzet ppen a legals. Legfell lthat munkafzet az aktv.
Workbooks(1).Worksheets.add

A munkalapok Worksheets gyjtemnyt bvthetjk egy-egy elemmel, Worksheet objektummal. Azt is meghatrozhatjuk, hogy melyik munkafzetbe helyeznk j munkalapot. Ehhez a megfelel munkafzet objektumra is r kell mutatnunk. Az elz utasts teht nem az aktv munkafzetet bvti egy lappal, hanem azt, amelyiket legkorbban hoztuk ltre, vagy nyitottuk meg, hiszen erre hivatkoztunk.

139

Az Excel objektumai
?worksheets(1).name

3. rsz

A Worksheets gyjtemny sorrendben els objektumnak a nevt rathatjuk ki a fenti utastssal. Ugyanazt a tulajdonsgot hasznljuk fel, mint amivel a munkafzet nevt kirattuk. A tulajdonsg ugyanaz, de az objektum mr ms. A munkafzet lapjaira is hivatkozhatunk a zrjelbe rt szmmal, de most nem az rkezsi sorrend a szmozs alapja, hanem a munkafzetben elfoglalt hely. Teht a Worksheet objektum a Worksheets gyjtemny egyik eleme, amire indexelssel is hivatkozhatunk.
worksheets(1).name="Szmtsok"

A munkalap neve, ellenttben a munkafzet nevvel megvltoztathat. Ezt a kiszemelt munkalap objektum Name nv tulajdonsgnak az trsval tehetjk meg. Erre plda a fenti utastssor. Ez az utasts az aktv munkafzet els lapjnak a nevt vltoztatja meg.
?worksheets.add.name

Ez egy rdekes tbb funkcis utasts. Egyfell, vgrehajtja az Add metdust, msfell kirja az j munkalap nevt. Teht egyszerre hajtunk vgre egy metdust s ratunk ki egy tulajdonsgot.
worksheets.add.name = "Adatok"

Copy
A Copy metdussal msolatot kszthetnk egy munkalaprl.

Az elz utastst kiss talaktva azt is megtehetjk, hogy programbl beszrunk egy j munkafzet lapot s a beszrs pillanatban mr el is nevezzk. Ebben az utastsban ismt egytt hasznljuk a metdust s a tulajdonsgot.
Worksheets("Szmtsok").copy Before:=Worksheets(2)

A Copy metdussal munkalapokat msolhatunk. A Before paramterben meghatrozhatjuk, hogy melyik munkalap el kerljn a msolt munkalap. Figyeljk meg a munkalap nevt. Mivel kt egyforma nev munkalap nem lehet egy munkafzetben, ezrt a msolat neve Szmtsok(2) lesz. Ezzel az utastssal ltrehoztunk egy j munkalapot, amit a munkalap gyjtemny megfelel helyre be is fztnk. Az j munkalap s a befzs mveleteket a Copy metdus oldotta meg.
Worksheets("Szmtsok").copy before:=Workbooks("Munkafzet2").worksheets(2)

140

13. fejezet

Ismerkeds a tulajdonsgokkal
Move
Ezzel a metdussal thelyezhetjk a munkalapot egy msik helyre. A hely lehet akr egy msik munkafzet is.

Ezzel az utastssal a szmtsok munkalapot egy msik munkafzetbe msoltuk t. Az utastst csak akkor hajthatjuk vgre hibazenet nlkl, ha valban van Munkafzet2 nev munkafzetnk. Ha nincs, vlasszunk olyan munkafzet nevet, amelyik ltezik.
Worksheets("Szmtsok").move Before:=Worksheets(4)

A Move metdus thelyezi a munkalapot egy msik helyre. Most nem msolat kszl, hanem csak thelyezs. Termszetesen ebben az esetben is vlaszthatunk clknt msik munkafzetet.
Worksheets("Szmtsok").copy
Select

Ha nem hatrozzuk meg a Before paramtert, akkor j munkafzetet nyit a msoland munkalapnak, s ebbe az j fzetbe msolja a meghatrozott munkalapot.
worksheets(2).select

Azt az objektumot jellhetjk ki, amelyiknek a Select metdust hasznltuk.

Kivlasztja a munkafzet msodik lapjt. Ebben a hivatkozsban is hasznlhatjuk a munkalap nevt. Pldul:
worksheets("Szmtsok").select worksheets(Array(1,4,6)).select

Egyszerre tbb munkalapot is kivlaszthatunk. A fenti utasts eredmnyeknt a Munka1, Munka4 s a Munka6-os munkalap lesz kivlasztva, vagyis csoportba foglalva.
activesheet.select

Ha tbb munkalap van egyszerre kijellve, akkor az a munkalap az aktv amelyiknek a neve vastag betvel ltszik. Ezzel az utastssal megsznik a csoportba foglals s csak az aktv munkalap lesz kivlasztva. A kvetkez pldhoz ismt hajtsuk vgre a csoportba foglalst elvgz utastst.
worksheets(Array(1,4,6)).select worksheets(4).activate
Sheets
A Sheets gyjtemny magba foglalja a munkafzet sszes lapjt, azok tpustl fggetlenl.

A csoportba foglalt munkalapok kzl a megjellt negyedik munkalapot teszi aktvv. Ha egy olyan munkalapra mutatunk, amelyik nem

141

Az Excel objektumai

3. rsz

volt a csoportba foglalt lapok kztt, akkor ugyangy viselkedik, mint a Select utasts, vagyis megsznteti a csoportba foglalst s kivlasztja a megcmzett munkalapot.
?sheets.count
Charts
A Charts gyjtemny a munkafzetben elhelyezett diagramlapok csoportja.

Megszmolja az aktv munkafzetben tallhat sszes lapot. A Sheets is gyjtemny, s az adott munkafzet sszes lapjt magba foglalja.
?Worksheets.count

Windows
A munkafzetek ablakokban jelennek meg. Az ablakok gyjtemny neve a Windows.

Csak a munkalapokat szmolja meg, vagyis a Worksheets gyjtemny elemeinek a szmrl ad tjkoztatst, teht azokrl, amelyeken szmolni szoktunk. A diagram lapok megszmllshoz a ?Charts.Count utastst kell kiadnunk.

Ablakok gyjtemny, ablak objektum


Az Excelben megnyitott ablak nem azonos a munkafzettel. Csak annyi a kapcsolatuk, hogy a munkafzet is egy ablakban jelenik meg. A kvetkez gyakorlatokhoz elegend lesz egy megnyitott munkafzet. Teht zrjuk le a felesleges munkafzeteket, majd a VBE prbaablakba rjuk be a kvetkez utastst:
ActiveWindow.NewWindow

Arrange
Az Excelben megnyitott ablakok elrendezst llthatjuk be az Arrange tulajdonsggal.

Azonos azzal a mvelettel, amikor az Ablak (Window) j ablak (New window) utastst hajtjuk vgre. Az utasts vgrehajtsa ltrehoz egy j ablakot az aktv munkafzethez. Teht kt ablakban is ugyanazt a munkafzetet ltjuk.
Windows.arrange arrangestyle:=1

Ebben az utastsban az Arrange metdus segtsgvel egyms mell rendeztk a Munkafzet1 ablakait. A metdusnak az Arrangestyle argumentuma mgtti egyes szm a mozaik elrendezs meghatrozst szolglja.
Windows.arrange arrangestyle:=xlcascade

Az utasts ugyanaz, mint az elz volt, de most nem egy szmmal hatroztuk meg, hogy milyen legyen az ablakok elrendezse, hanem egy Excel bels llandval. Ez az lland egy szmot helyettest. Ha a prbaab-

142

13. fejezet

Ismerkeds a tulajdonsgokkal

lakba berjuk a ?xlcascade utastst, akkor megtudhatjuk azt, hogy ez az lland a hetes szmot rejti.
Windows(2).activate

A kaszkd elrendezs ablakok kzl a legfels az egyes szm. Teht most a fellrl szmtott msodik ablak kerl fellre. Ezzel viszont a fellre kerlt ablak sorszma egyes lett. Mskppen fogalmazva, ha a Windows(1).activate utastst adjuk ki, akkor semmi nem trtnik, hiszen ez az aktv ablak s ez mr az utasts kiadsa eltt is aktv volt.
activewindow.activatenext

Ezzel az utastssal tlphetnk a sorrendben kvetkez ablakba. Ha ugyanis aktivlunk egy ablakot, akkor a legutbb hasznlt ablak a sor vgre kerl. gy az utasts tbbszri vgrehajtsval egyenknt vgiglpkedhetnk az alkalmazsban jelenleg ltez ablakokon.
?activewindow.caption

Ez az utasts kirja az ppen aktv ablak feliratt. Figyelem ez nem azonos a munkafzet nevvel. Ez csak a jelenleg aktv ablak felirata. Ha most lekrdezzk a munkafzet nevt, akkor ltni fogjuk a klnbsget.
activewindow.caption="Az n ablakom"

Az aktv ablak feliratt megvltoztathatjuk. Ez nem a munkafzet neve, csak az ablak. Az utastsait rdemes ismt kiprblni. Teht az ablak feliratt megvltoztathatjuk programbl, de a munkafzet nevt nem. Ilyet mr korbban is csinltunk, amikor trtuk az Excel alkalmazs cmt. Akkor is a Caption tulajdonsgot hasznltuk.

Cells
A Cells gyjtemny a munkalap cellira mutat. Egy eleme mindig egy cellt takar.

Cellk s tartomnyok
Lpjnk t az Excelbe s zrjuk le a megnyitott ablakokat. Csak egy munkafzet egy ablaka legyen nyitva. Ismerkedjnk egy kicsit a munkalapon tallhat cellkkal, tartomnyokkal. Adjuk ki a kvetkez utastst!
cells.select

A fenti utastssal az ppen aktv munkalap sszes celljt kijelljk, mivel a Cells objektumgyjtemnnyel vgeztnk mveletet. Ennek a parancsnak a vgrehajtsa ugyanazt eredmnyezi, mintha a munkalap bal

143

Az Excel objektumai

3. rsz

fels sarkra kattintannk. A cells gyjtemnynek nincs Add metdusa. A cellk szma ugyanis kttt s nem lehet megvltoztatni a szmukat.
cells(1).select

A cells gyjtemny els eleme a kivlasztott munkalap A1-es cellja. Vagyis a cella meghatrozsa sorn is meg kell mondanunk, hogy a cellk gyjtemny melyik tagjt szeretnnk kijellni. A cella meghatrozsa a Cells objektum mgtti zrjelbe rt szmmal lehetsges. A cellk szmozsa a munkalap bal fels celljtl kezddik s jobbra haladva nvekszik.
cells(5).select

Az els cellasor tdik celljnak a kivlasztsa.


cells(257).select

Ez az utasts a msodik cellasor els celljt jelli ki. Ez azrt van, mert egy sorban 256 cella van, s ha ezt tllpjk, akkor mr a kvetkez cellasor valamelyik celljra mutat.
cells(16777216).select

A jelenlegi munkalap legutols celljt vlasztja ki.


cells(2,3).select

A Cells gyjtemny egyik elemt meghatrozhatjuk a sorszm s az oszlopszm megadsval is. A fenti utasts zrjelben kt szmot ltunk egymstl vesszvel elvlasztva. Az els szmmal a sorszmot hatrozhatjuk meg, a msodikkal pedig az oszlop szmot.
cells(65536,256).select

Ennek az utastsnak a vgrehajtsakor ugyanaz lesz az eredmny, mintha a cells(16777216).select utastst adtuk volna ki.
Cells(1) = 400

A cell objektum tulajdonsgainak rtket is adhatunk. A legutbb kiadott select-tel a munkalap legutols celljt kivlasztottuk ki, azaz a legutols cella aktv. Ha kiadjuk a fenti utastst, akkor ezzel gy rhatunk adatot a munkalap egyes celljba, hogy nem vlasztjuk ki azt.

144

13. fejezet

Ismerkeds a tulajdonsgokkal

Az utasts vgrehajtsa utn lpjnk vissza az A1-es cellra. Ott fogjuk tallni a 400-as szmot. Ebben az utastsban a Cells(1) cella Value tulajdonsgt lltottuk be. Teht pontosan, gy kellett volna lerni az utastst: Cells(1).value = 400 jelezve ezzel azt, hogy az objektum melyik tulajdonsgt kvnjuk mdostani. Erre most azrt nem volt szksg, mert minden objektumnak van egy alaprtelmezett tulajdonsga, a cella objektum az rtk Value tulajdonsg.
range("c3").select

Range
Jelentse tartomny. Segtsgvel tartomnyra hivatkozhatunk. A tartomny llhat egyetlen cellbl is.

A tartomny objektum neve: Range. Ezzel hivatkozhatunk egy cellra vagy tbb cellbl ll tartomnyra. Jelen esetben egy cellra hivatkozunk, nevezetesen a C3-asra. A hivatkozs egyik mdja, ha a Range gyjtemny zrjelbe idzjelek kz berjuk a cella A1 tpus cmt. Ezt a Cells gyjtemnyben nem tehetjk meg, ezrt a programozskor gyakran cellahivatkozsra is ezt az utastst hasznljuk.

37. bra: Tartomny kijellse


range("b2:d5").select

A Range gyjtemnybl kijelljk a B2:D5-s tartomnyt. Itt a kijellend tartomny bal fels s jobb als celljt hasznljuk fel a tartomny meghatrozsra (37. bra).
range("b2,c4,d1,a5").select

Egyszerre tbb tartomnyt is kijellhetnk. Ennek az rsmdja azonban eltr a munkafzetben hasznlttl. A tartomnyokat itt vesszvel kell elvlasztani egymstl, fggetlenl a Windows nemzetkzi belltstl.
range(cells(2,2),cells(5,4)).select

145

Az Excel objektumai
Columns
Egy tartomny oszlopaira hivatkozhatuk ezzel a gyjtemnnyel.

3. rsz

Ennek a tartomnykijellsnek az rdekessge az, hogy a Range paramtereiben a Cells gyjtemny kt tagja van. A zrjelek kztti kt cellahivatkozs a tartomnyt hatrol cellkat jelli (37. bra).
?cells.count ?columns.count ?rows.count

Rows
Egy tartomny soraira hivatkozhatuk ezzel a gyjtemnnyel.

Az els utasts a munkalap Cells gyjtemnynek az elemszmt hatrozza meg, a msodik a Columns gyjtemny elemeit szmolja meg, mg a harmadik a Rows gyjtemny elemeinek a szmt adja vissza eredmnyknt. A Count mdszert hasznljuk fel arra, hogy a gyjtemny elemeinek a szmt lekrdezzk. Most azrt a teljes munkalap cellinak, sorainak s oszlopainak a szmt hatroztuk meg, mert ha nem mondjuk meg, hogy melyik tartomnyra gondolunk, akkor az ppen aktv munkalappal dolgozik a program.
?Range("A1:D6").cells.Count ?Range("A1:D6").columns.Count ?Range("A1:D6").rows.Count

Ha szksges, akkor megszmolhatjuk egy tartomny cellinak, oszlopainak, vagy sorainak a szmt is. A kvetkez plda bersa eltt jelljnk ki egy cellatartomnyt. Ehhez adjuk ki pldul a Range("b2:c7").select utastst.
?selection.cells.count ?selection.columns.count ?selection.rows.count

Az ppen kijellt tartomnyra a Selection objektumnvvel hivatkozhatunk. Ennek a jellemzit is megtudhatjuk a fenti utastsokkal. A Selection objektumnak a tulajdonsgai s metdusai egyeznek a Range objektumval. Adattartomny w Programozs sorn gyakran hasznlunk adatokkal kitlttt tartomnyokat. Ezek jellemzire is szksgnk lehet a program rsa kzben. A kvetkez pldkban olyan gyakorlatokat vgznk el, amivel az adattartomnyok kezelst ismerhetjk meg. Lpjnk t az Excelbe s tltsk be az Adattart.xls munkafzetet. Ez utn ismt lltsuk vissza a krnyezetet gy, hogy a Visual Basic szerkeszt az Excel eltt legyen s ismerkedjnk meg nhny lehetsggel. lljunk az A1-es cellra. Ehhez adjuk ki a Cells(1).select utastst.

Currentregion
A kijellt, aktv tartomnyt krlvev adattartomnyra hiatkozhatunk a segtsgvel.

146

13. fejezet

Ismerkeds a tulajdonsgokkal

38. bra: Hivatkozs az aktulis adatterletre


Selection.currentregion.select

Az ppen kijellt cellt vagy tartomnyt krlvev adattartomnyra hivatkozhatunk a fenti paranccsal.
Range("b5").currentregion.select

Hivatkozhatunk olyan adattartomnyra is, amelyik nem a jelenleg kijellt cella krl van. Ilyenkor meg kell mondanunk azt is, hogy melyik cella krli adattartomnnyal szeretnnk mveletet vgezni. Ebben az esetben egy Range objektumra hivatkozva kell kezdeni az utastst s mg kell rni a currentregion objektumot, majd elvgezni a kvnt mveletet. Ez a pldban a kijells. Az egyszersg kedvrt a tovbbi kijellseket vagy adattartomny hivatkozsokat kezdjk a Range tartomny meghatrozsval.
?Selection.SpecialCells(xlCellTypeBlanks).count

SpecialCells
Az ugrs prbeszdpanelbl elrhet specilis kijellst programozhatjuk ezzel a hivatkozssal.

A kivlasztott cella krnyezetben tallhat res cellk szma az eredmny. Ennek az utastsnak a vgrehajtsa sorn nem kellett kijellni a tartomnyt.
Range("a1").SpecialCells(xlCellTypeBlanks).select

Az A1-es cella krnyezetben tallhat res cellkat jellhetjk ki. A kijells az utols cellig tart. Itt az utols cella nem a munkalap utols celljt jelenti, hanem az utols mg kitlttt cellt. Vlasszuk ki ismt az

147

Az Excel objektumai

3. rsz

A1-es cellt, s szmoljuk meg, hogy mennyi res cella van az ppen kijellt cella krnyezetben.

39. bra: SpecialCells objektum s a paramterei

148

13. fejezet

Ismerkeds a tulajdonsgokkal

A SpecialCells bersakor, amint a zrjelhez rnk, a lenyl listapanel felknl nhny Excel llandt. Ezeknek a nevbl kiderl, hogy melyiket kell kivlasztanunk egy adott specilis jellshez. Ezeket a cellkat kijellhetjk, megszmolhatjuk s klnfle Range objektum tulajdonsgokat s metdusokat hasznlhatunk. Vgezznk el nhny kijellst vagy rassuk ki a meghatrozott cellk szmt a felsorolt cellatpusokra vonatkozan, majd zrjuk le a munkafzetet. Relatv tartomnyok kezelse w Kezdjnk egy res munkafzetet, s ennek az egyik munkalapjn hozzunk ltre egy adattartomnyt. A Visual Basic szerkeszt prbaablakba rjuk be a kvetkez utastst:
Range(B2:F10)= "Adat"

Ezzel az utastssal a B2:F10-es tartomny mindegyik celljba bertuk az Adat szveget. Ezutn lljunk az adattartomny terletn bell egy cellra, pldul a Range(B3).select utastssal. Adjuk is ki!
Range(B3).select

Azrt, hogy jobban kvethessk az elvgzett gyakorlatokat, ezen az adattartomnyon fogunk dolgozni. Ha a tartomny egyik celljn llunk, akkor erre a tartomnyra a Selection.CurrentRegion hivatkozssal mutathatunk r. Ha az adattartomnyon kvl lv celln llunk, akkor a helyes hivatkozs pldul a Range("a2").currentregion is lehet. Ezekben

Rows
A Rows gyjtemny elemvel hivatkozhatunk egy adott tartomny tetszleges sorra.

40. bra: Az aktulis adattartomny nulladik sort jelltk ki a pldkban azzal ismerkedhetnk meg, hogy ha egy tartomnnyal mveletet szeretnnk vgrehajtani, akkor elegend hivatkozni a megfelel cellra. lljunk teht az adattartomny egyik celljra.
Selection.currentregion.rows(0).select

Most a Selection.CurrentRegion egy tartomnyhivatkozs. Ezt a mveletet brmelyik tartomnnyal elvgezhetjk. Ebben az utastsban a tartomny objektum nulladik sort jelltk ki. Ez ppen az aktulis adattartomny feletti sor. Ha nem hatrozzuk meg az aktulis tartomnyt,

149

Az Excel objektumai

3. rsz

vagyis csak azt rjuk be, hogy rows(1).select, akkor az aktulis munkalap els cellasort fogjuk kivlasztani az utastssal. Most azonban mivel meghatroztuk, hogy melyik tartomny sort szeretnnk megjellni, csak olyan szlessgben jelltk ki a cellasort, amilyen szles az aktulis tartomny. lljunk ismt az adattartomny terletre (Range(B3).select), majd utna adjuk ki a kvetkez utastst:
Selection.currentregion.rows(1).font.bold = true

Columns
Egy adott tartomny megfelel oszlopra hivatkozhatunk a segtsgvel.

Figyeljk meg, hogy ennek az utastsnak az eredmnyeknt az adattartomny els cellasornak beti flkvrek lettek. Ezt a Font.bold tulajdonsg belltsval rtk el. Most azonban a hivatkozst rdemes megfigyelni. Ez a Selection.currentregion.rows(1). Ezzel a hivatkozssal az adott tartomny els sorra hivatkoztunk. Hasonl mdon az els oszlop cellaformzst is megvltoztathatjuk, ha a kvetkez utastst is vgrehajtjuk:
Selection.currentregion.columns(1).font.bold = true

Offset
Az Offset ideiglenesen thelyezi az A1-es cellt

Az A1-es cella thelyezse w Szksgnk lehet arra, hogy egy adott cellhoz viszonytva, attl egy megfelel tvolsgra elhelyezked tartomnyra hivatkozzunk. Ebben az esetben az A1-es hivatkozst thelyezhetjk a munkalap brmely pontjra. A kvetkez utastsok segtsgvel nem csak a kijellt vagy aktulis tartomny sorait vagy oszlopait fogjuk cmezni, hanem egy adott cellhoz viszonytott tartomnyt. Ehhez vlasztanunk kell egy viszonytsi pontot. Ez lehet egy cella vagy egy tartomny, ilyenkor a tartomny bal fels cellja a viszonytsi pont. rjuk be a kvetkez parancsot az Immediate ablakba s hajtsuk is vgre:
range("c4").Select

A mi esetnkben ez a viszonytsi pont selection.currentregion hivatkozsnak megfelelen a az adattartomny bal fels cellja. Ez jelen esetben a munkalapon a B2-es cellja. Hajtsuk teht vgre a kvetkez utastst:
selection.currentregion.offset(2,3).range("a1:a3").select

A mvelet vgrehajtsa utn az adattartomny bal fels celljtl hrom oszloppal jobbra s kt sorral lejjebb hivatkozik az offset. Az utasts eddigi rsze az gy meghatrozott pontra helyezte t az A1-es cella hivatkozst. Az offset mg rt range objektum az offset ltal megjellt cellt

150

13. fejezet

Ismerkeds a tulajdonsgokkal

tekinti A1-es cellnak. gy teht a range("a1:a3") hivatkozs nem a munkalap A1:A3-as tartomnyt jelli meg, hanem az offset ltal meghatrozott cellhoz viszonytott A1:A3-as tartomnyt. Az offset s a range kom-

41. bra: Az Offset eltolja az A1-es cella helyt binciival egy cellhoz vagy egy tartomny bal fels celljhoz viszonytott brmilyen tartomnyt kijellhetnk. Az offset argumentumai negatv szmok is lehetnek, ezzel a viszonytsi pont eltti cellk egyikre mutathatunk.

Rajz objektumok
Zrjuk le ments nlkl azt a munkafzetet, amelyikbe eddig dolgoztunk, s kezdjnk egy j, res munkafzetet. Ebben most a rajz objektumokkal vgezhet mveletek kzl vizsglunk meg egy prat. Az els legyen az, hogy hogyan hasznlhatjuk az Add metdust a rajzok esetn.
ActiveSheet.Rectangles.Add(45, 9, 72, 30).Select

Rectangles
Tglalapok gyjtmnye

42. bra: Tglalap

151

Az Excel objektumai

3. rsz

Az aktv munkalapra rajzolunk egy tglalapot a fenti utastssal. Az Add metdus zrjelei kztt tallhat szmok sorrendben a kvetkez rtkek: bal oldal tvolsga a munkalap bal szltl, a tglalap fels oldalnak a tvolsga a munkalap tetejtl, a tglalap szlessge s vgl a tglalap magassga.
Selection.Interior.ColorIndex = xlNone
Shapes
Office rajz alakzatok gyjtemny. Hasznlhatjuk mindegyik Office alkalmazsban.

A tglalap htternek (Interior) a ColorIndex tulajdonsgt megvltoztathatjuk. A jelenlegi az tltsz, de, ha ide pldul az xlNone helyre egy hrmast runk, akkor a tglalap sznezse piros lesz, mert a sznpaletta harmadik szne a piros. A munkalaphoz nem csak tglalapot adhatunk hozz programbl, hanem az Excelben j rajzalakzatokat is. Ezt egy kicsit mskppen kell

43. bra: Office rajz objektum megtennnk, mint a tglalap hozzadst. Teht ismerkedjnk meg az j elemek kezelsvel is. Pldul:
ActiveSheet.shapes.addshape(msoshape16pointstar, 50,20,100,100).select

A fenti utasts egy 16 g csillagot helyez el az ppen aktv munkalapra. Ha msik munkalapra hivatkozunk, akkor arra kerl r a rajzalakzat. Az utastsban szerepl msoshape16pointstar egy Office lland. A zrjelen bell ez az els argumentum. Ez hatrozza meg azt, hogy milyen alakzatot adunk hozz a kijellt munkalaphoz. A tbbi ngy szm szerepe ugyanaz, mint az elbb elksztett tglalap esetn, vagyis a hely s a mret meghatrozsa. Ezeket a vltozkat megtalljuk a sgban.
activesheet.shapes(1).select

A rajzalakzatok kivlasztsra hasznljuk ezt az utastst. A zrjelbe rt szm az elhelyezs sorrendjnek felel meg, teht most a tglalap lesz

152

13. fejezet

Ismerkeds a tulajdonsgokkal

kivlasztva. Ha a zrjelbe kettest runk, akkor pedig a csillag. Tegyk ezt meg s vltoztassuk meg a sznt a csillagnak.
selection.shaperange.fill. onecolorgradient, msogradientvertical ,1,0.25

Szntmenetes kitltst adtunk az alakzatnak. Az els paramter a msogradientvertical ez a fggleges irny szntmenet belltst vgzi. Az lland nevbl kiolvashat a vlaszts hatsa. A msodik paramter az tmenet vltoz. Ennek az rtke 1 s 4 kztt lehet. Ez azt hatrozza meg, hogy hol legyen az tmenet: a bal oldalon, a jobboldalon, a szlek legyenek vilgosabbak, vagy a kzps rsz legyen vilgos. A harmadik pedig egy nulla s egy kztti rtk: az tmenet erssge llthat be vele.
selection.characters.text = "Szveg megjelentse"

A kivlasztott alakzatba szveget rhatunk. Erre plda a fenti utasts.

44. bra: Ksztsnk egy ehhez hasonl diagramot!

Diagram objektumok
Mieltt ezekbe a gyakorlatokba belefognnk, ismt kezdjnk egy j munkafzetet s ebbe ksztsnk el egy diagramot. Ezen fogjuk kiprblni a diagram objektumok nhny lehetsgt. A diagram ltrehozsa utn alaktsuk ki a megfelel krnyezetet a gyakorlatokhoz.
activesheet.chartobjects.item(1).select

153

Az Excel objektumai

3. rsz

Miutn tlptnk a Visual Basic szerkesztbe, vlasszuk ki a diagramot. A diagram kivlasztsa a fenti utastssal trtnik. A zrjelbe rt szm a ltrehozs sorrendjnek felel meg. A diagramok esetn a kivlasztott diagramokkal vgezhetnk mveleteket.
activechart.chartwizard gallery:=xl3dline

Az elksztett s aktv diagram diagramtpust tetszs szerint megvltoztathatjuk. Erre a diagramvarzsl eljrst hasznljuk fel. A Galery paramter mg klnfle Excel llandkat rhatunk be. Ezek mindegyike a nevben hordja a formzs hatst.
activechart.chartwizard format:=2

A varzsl msik argumentuma a Format, ezzel a diagram osztsait llthatjuk be. Ide a diagram tpustl fggen a ktdimenzis diagramok esetn 1 s 10 kztti szmot rhatunk, mg ms diagramoknl ennl kevesebb lehetsg kzl vlaszthatunk.
activechart.chartwizard categorylabels:=2

A diagram kategriatengelynek a feliratt az adattbla els oszlopaibl kszti el a varzsl. Itt vltoztathatunk ezen. Az utasts rtke azt hatrozza meg, hogy hny oszlop kerljn a kategriatengely al feliratknt. Ha kiprbltuk lltsuk vissza az egyes rtket.
activechart.SeriesCollection(1).select activechart.Legend.Select

Ezzel az utastssal megjellhetjk a diagram egyik adatsort. A zrjelbe rt szm az adatsor sorszma. Ms diagramelemeket is megjellhetnk. A Legend pldul a jelmagyarzat.
activechart.HasTitle= True

A fenti utasts a diagramhoz ad egy szvegdobozt. Ez a diagram cme lesz. Mivel mg nem hatrozhattuk meg a tartalmt, ezrt egy alaprtelmezett szveg jelenik meg benne. Ez a magyar Excelben Diagramcm, az angolban Chart title. Hasonl mdon a kategria tengelyhez s az rtktengelyhez is rendelhetnk feliratot.
activechart.Axes(xlcategory,xlPrimary) .hastitle = true

154

13. fejezet

Ismerkeds a tulajdonsgokkal

A kategriatengely feliratnak a megjelentsre hasznlhat tulajdonsg-belltst ltjuk. Ha az xlcategory Excel-lland helyre az xlvalue llandt rjuk, akkor ugyanezzel az utastssal az rtktengely mell kszthetnk feliratot.
activechart.ChartTitle.Characters.Text = "Bemutat" activechart.Axes(xlcategory,xlPrimary).axistitle.characters .text ="Kategria" activechart.Axes(xlvalue,xlPrimary) .axistitle.characters.text ="rtk"

A fenti hrom utastssor a mr ltrehozott feliratok tartalmnak a megvltoztatsra szolgl. Ezeket az utastsokat, csak akkor hasznlhatjuk, he eltte mr ltrehoztuk a tengelyek feliratait.
activechart.Legend.Select selection.position= xlLeft

A fenti utasts segtsgvel meghatrozhatjuk a diagram jelmagyarzatnak a helyt. A jelmagyarzat helyre az Excel llandk szvegei utalnak: xlLeft, xlRight, xltop s az xlbottom.
ActiveChart.Rotation = 15

A diagram Rotation tulajdonsgnak belltst arra hasznlhatjuk, hogy programbl a kvnt irnyba fordtsuk a diagramot. A Rotation rtke 0 s 360 fok kztt lehet. Ez a bellts csak a hromdimenzis diagramoknl hasznlhat!

sszefoglals
A VBE Immedite ablakban kzvetlenl kiadott parancsok hatst megfigyelve megismerhetjk az objektumok tulajdonsgait metdusait. Az objektumok jellemzit a program felknlja, amint az objektum neve mg pontot runk. A felknlt nevekbl kitallhatjuk, hogy melyik tulajdonsgnak, vagy metdusnak mi a feladata. A httrben elhelyezett Excelben azonnal megnzhetjk a mveletek eredmnyt.

155

14. fejezet

Makr ksztse felvtellel


iutn megismerkedtnk az Excel nhny objektumval s olvastunk a Visual Basic for Application utastsairl, ismerkedjnk meg az egyik legegyszerbb, leggyorsabb programozsi mdszerrel a makr rgztssel. A legegyszerbben ezzel a mdszerrel automatizlhatjuk a napi feladatainkat. Kzben az Excel megr egy-egy eljrst, amibl sokat tanulhatunk az objektumok tulajdonsgairl, metdusairl. Ezrt minden elksztett makr-felvtelt rdemes kielemezni. Ennek elsdleges clja, hogy kzelebb kerljnk az Excel objektumaihoz. Lssuk, milyen krdsekre kaphatunk vlaszt ebbl a fejezetbl. w w w w w Hogyan kszthetnk felvtellel eljrst? Hova kerlnek a felvett programok? Mit tanulhatunk a felvett eljrsbl? Hogyan mdostatjuk a rgztett makrt? Hogyan rdemes elkezdeni egy program megrst?

Makr rgztse
Amint egy makr rgztsbe fogunk, az els, hogy meghatrozzuk, melyek azok a mveletek, amelyeket szeretnnk automatizlni. Ha a feladat sok lpsbl ll, akkor tbbszr gyakoroljuk el, mieltt a felvtelt elkezdennk, ugyanis makr rgztskor az Excel minden kis mozdulatunkat hen megriz. Pldul, ha nem azon a celln llunk a felvtel megkezdsekor, amelyiken kell, s felvtel kzben mdostunk a cella kijellsn, akkor a makr vgrehajtsakor a program is megvltoztatja a cella kijellst, s innen fog indulni a lejtszs. A most kvetkez felvtel egy egyszer plda lesz. Ezt arra hasznljuk, hogy megismerjk a makr-rgzts krlmnyeit, eszkzeit. Ksztsnk el egy olyan felvtelt, amelyik az aktulis munkalap els celliba automatikusan berja a munkafzet ksztjnek az adatait. Az adatok berst 157
Makr rgzts
Egy makr rgztse sorn az Excel egy eljrsban megjegyzi a vgrehajtott mvelteket.

Az Excel objektumai

3. rsz

kezdje a program az A1-es celltl, s innen tovbbhaladva tltse ki a megfelel cellkat a megfelel adatokkal. Ksztsk el a feladatot. Tltsnk be egy res munkafzetet s lljunk az A1-es cella kivtelvel brmelyik cellra. rjuk le egy paprra, hogy milyen lpseket szeretnnk rgzteni a felvtel sorn. A felvenni kvnt mveletek a kvetkez lpsekbl fognak llni:
Elkszts
rjuk le a rgzteni kvnt makr lpseit.

1. 2. 3. 4. 5. 6. 7. 8. 9.

Az egrrel kattintsunk az A1-es cellra. (mert ugye nem azon lltunk) Gpeljk be, a Ksztette szveget. Kattintsunk a B1-es cellra. Gpeljk be a nevnket. Kattintsunk az A2-es cellra. rjuk be a Vllalat szt. Kattintsunk a B2-es cellra. Gpeljk be a vllalatunk nevt. ssk le az ENTER billentyt.

Miutn paprra rgztettk az elgondolsunkat, belekezdhetnk a makr rgztsbe. A programrgzts megkezdsekor meghatrozhatjuk a felvett eljrs helyt, nevt s, hogy mi legyen az a billentykombinci, amelynek hatsra elindthatjuk majd az elksztett programot.

A felvteli jellemzk meghatrozsa


A felvtel elindtsa sorn egy kicsit mg msra kell figyelnnk. Ugyanis az Excel most krdezi meg, hogy hova szeretnnk rgzteni a programot. Azt is itt adhatjuk meg, hogy milyen billenty-kombincival induljon majd el a rgztett eljrs.
CD mellklet 14 Fejezet
Rogzites_1.xls

45. bra: A makr felvtel lpsei

158

14. fejezet

Makr ksztse felvtellel

Kezdjk el a felvtelt (45. bra)! Teht az A1-es cella kivtelvel brmelyik celln llhatunk a felvtel megkezdsekor. 1. Vlasszuk ki az Eszkzk (Tools) Makr (Macro) j makr rgztse (Record New Macro) utastst. 2. A Makrnv (Macro name) szerkesztdobozba rjuk be a rgztsre kerl program nevt: Keszitette. 3. A Parancsbillenty (Shortcut key) dobozba rjuk be azt a billentykombincit, amivel majd el fogjuk indtani az elkszlt programot. Ez legyen a k bet.
Rgzts indtsa
A felvtelt az Eszkzk Makr j makr paranccsal indthatjuk el.

Hova kszljn a felvtel


A makr helye (Store macro in) listapanelben meghatrozhatjuk, hogy hova kerljn a felvett program. A lista lenyitsa utn hrom lehetsg kzl vlaszthatunk. Egyni makr munkafzetbe w (Personal Macro Workbook) Ez egy olyan munkafzet, amit az Excel akkor hoz ltre, amikor elksztjk az els makr felvtelt. Az j munkafzet neve Personal.xls lesz s automatikusan az XlStart mappba fogja menteni az Excel. Teht a Personal.xls mentsrl nem neknk kell gondoskodnunk. Ez a munkafzet rejtve marad. Az XlStart mappa feladata, hogy az Excel elindtsakor betltse azokat a munkafzeteket is, amelyeket ide mentettnk. Vagyis ezt a mappt arra is felhasznlhatjuk, hogy azokat a munkafzeteket, amellyel a napi munkinkat kezdjk ide mentjk, gy az Excel elindtsa utn nem kell kln gondoskodnunk arrl, hogy ezeket betltsk. Ezt a tulajdonsgt hasznljuk fel arra, hogy a Personal.xls minden elindts utn be legyen tltve. Ezt a munkafzetet azrt nem ltjuk, mert amikor a program ltrehozta s elmentette, akkor rejtett volt, gy az jabb betlts utn is rejtett marad. Ez a mappa az jabb opercis rendszerekben a felhasznli profilhoz van hozzrendelve. A felvtel ksztsekor az Excel a kvetkez mappba mentette a Personal.xls fjt. C:\Documents and Settings\Kovalcsik Gza\Application Data\Microsoft\Excel\XLSTART Ha az Office program kzs XLSTART mappjba helyezzk t ezt a munkafzetet, akkor az Excel minden esetben betlti fggetlenl attl, hogy ki jelentkezett be a gpre. A kzs XLSTART mappa a kvetkez helyen tallhat: C:\Program Files\Microsoft Office\OFFICE11\XLSTART
A felvett makr helye
A makr rgzts kezdetn meghatrozhatjuk, a felvtel helyt

Xlstart
Ez egy specilis mappa. Azok a munkafzetek amelyeket ide mentettnk, automatikusan betltdnek az Excel indtsakor.

159

Az Excel objektumai
Futtathat eljrsok
Csak azokat az eljrsokat tudjuk elindtani, amelyeket betltttnk. Ezrt az eljrsokat tartalmaz munkafzeteket be kell tlteni.

3. rsz

Minderre azrt van szksg, mert csak azokat az eljrsokat futtathatjuk, amelyek egy megnyitott munkafzetben vannak. Az Excel gy menti el a fzetet, hogy rejtett llapotban tltdjn be. gy nem zavarja a felhasznlt egy resen megnyitott dokumentum. j munkafzetbe w (New Workbook) Ha ezt a lehetsget vlasztjuk, akkor az Excel a felvtel elindtsa utn ltrehoz egy res munkafzetet, s abba fogja rgzteni a felvtelt. Ennek a mentsrl neknk kell majd gondoskodnunk, ahogy arra is neknk kell majd figyelnnk, hogy a felvett makrt csak akkor tudjuk hasznlni, ha azt elbb betltjk. Persze ha mi is elmentjk az XlStart mappba, akkor ez a munkafzet is betltdik az Excel indtsakor. A krds az, hogy milyen mdszerrel tudjuk mi is rejtetten elmenteni a munkafzetnket. Ha ugyanis elrejtjk, nem tudjuk menteni. A mdszer az, hogy rejtsk el a fzetet, majd lpjnk ki az Excelbl. Az Excel szreveszi, hogy a betlts ta vltoztattunk rajta. A vltoztats jelen esetben az, hogy elrejtettk. Amikor rkrdez a rejtett fzet mentsre, vlaszoljuk azt, hogy szeretnnk elmenteni. gy a kvetkez betltskor rejtve marad. Ebben a munkafzetben w (This Workbook) A felvtel a jelenleg hasznlt munkafzetbe kszl. A felvett makrt minden alkalommal hasznlhatjuk, ha eltte betltjk ezt a munkafzetet. Ezt a lehetsget rendszerint akkor rdemes vlasztani, amikor olyan programot ksztnk, amelyet csak egy munkafzetben szeretnnk hasznlni. A hrom lehetsgbl vlasszuk az Ebben a munkafzetben (This Workbook) lehetsget. Lpjnk tovbb a felvtel elksztsben: 4. Kattintsunk az OK gombra. Figyeljk meg, hogy bekapcsoldott egy eszkztr. Ezen talljuk meg azt a gombot, amelyikkel majd lelltjuk a felvtelt (a bal oldali gomb). 5. Vgezzk el a begyakorolt mveletsort, majd a mveletek vgrehajtsa utn lltsuk le a felvtelt. Ezt a felvtel indtsakor megjelen eszkztr Rgzts vge gombjval tehetjk meg. Ha az eszkztr nem jelenne meg, akkor vlasszuk ki az Eszkzk (Tools) Makr (Macro) Rgzts vge (Stop Recording) utastst. A felvtel ksz, ha szksges ki is prblhatjuk egy res munkalapon. Ehhez elegend, ha tlapozunk egy res munkalapra s letjk a CTRL+ k billentykombincit.

Rgzts vge
A bal oldali gombbal llthatjuk le a felvtelt

160

14. fejezet

Makr ksztse felvtellel


Makr panel
Ebben a prbeszdpanelben megtalljuk az ltalnos modulokba felvett eljrsok nevt. Innen elindthatjuk a makrt.

A makr panel
A munknk eredmnynek egyik jelt a makr prbeszdpanelben lthatjuk. Kapcsoljuk be a panelt az Eszkzk (Tools) Makr (Macro) Makrk (Macros) utasts segtsgvel. Ebben a panelben a kvetkezket fogjuk tallni: Makrnv w (Macro Name) A megjelen prbeszdpanel Makr nv listjban felsorolja azokat a makrkat, amelyek jelenleg elrhetek az Excelben, vagyis mr betltttk ket. Ha tbb makrt rgztettnk, akkor a Makrnv (Macro Name) listban tbb elem lesz. Indts w (Run) Ha a listban felsorolt programok kzl valamelyiket el szeretnnk indtani, akkor vlasszuk ki a futtatand program nevt s kattintsunk az Indts (Run) gombra. Lpsenknt w (Step Into) Lpsenknt haladhatunk vgig az utastsokon. Ha erre kattintunk, akkor betltdik a Visual Basic szerkeszt s megjelenik az ppen kivlasztott makr. Szerkeszts w (Edit) Betlti a Visual Basic szerkesztt s elnk trja azt a makrt, amelyiket elzleg kijelltnk a listban. Ltrehozs w (Create) Ha a panel Makrnv szerkesztdobozba berunk egy j nevet, akkor aktvv vlik ez a gomb. Ha ezutn rkattintunk tkerlnk a Visual Basic Editor programba s ott egy j eljrst tallunk, amelynek a neve az lesz amit bertunk a nv mezbe. Az eljrsba berhatjuk a sajt utastsainkat, gy j makrt hozhatunk ltre. Trls w (Delete) gomb lenyomsval trljk a listban kijellt eljrst. Egyebek w (Options) gombra kattintva megjelenik egy prbeszdpanel. Ebben lehetsgnk van a billentykombinci utasts megvltoztatsra. Ha valamilyen okbl a rgzts belltsakor nem vlasztottunk volna billentykombincit, akkor ezt utlag meghatrozhatjuk a listbl kijellt makrhoz.

Finomtsuk a felvtelt
Amint elkszltnk egy makr rgztsvel rdemes megnzni az eredmnyt. Ehhez kapcsoljunk t a Visual Basic Editor-ba s nyissuk meg azt a modult, amibe az Excel az eljrst berta. Itt a kvetkez programot talljuk:

Felvtel szerkesztse
A felvett makr egy nll eljrs lesz. Nyissuk meg s egyszerstsk a lpseket.

161

Az Excel objektumai
Sub Ksztette() Ksztette Makr Rgztette: Kovalcsik Gza, dtum: 2005 Billentyparancs: Ctrl+k Range("A1").Select ActiveCell.FormulaR1C1 = "Ksztette" Range("B1").Select ActiveCell.FormulaR1C1 = "Kovalcsik Gza" Range("A2").Select ActiveCell.FormulaR1C1 = "Vllalat" Range("B2").Select ActiveCell.FormulaR1C1 = "Help Key Bt" Range("B3").Select End Sub
Hivatkozzunk, ne jelljnk!
Programbl gy dolgozunk az objektumokkal, hogy hivatkozunk rjuk.

3. rsz

A rgztett makr rendszerint tbb lpsben oldja meg a feladatot, mint mi tennnk. Most is gy trtnt. A rgzts esetn ugyanis ki kell jellnnk azt a cellt, amivel dolgozni szeretnnk. Amikor az objektumokkal ismerkedtnk, megtanultuk, hogy nem kell kijellnnk azokat az objektumokat, amelyekkel mveleteket vgznk, elegend hivatkozni rjuk. Ez jelen esetben azokat a cellkat jelenti, amelyekbe bertunk. rjuk t a programot gy, hogy csak hivatkozsokat hasznljunk:
Sub Ksztette() Ksztette Makr Rgztette: Kovalcsik Gza, dtum: 2005 Billentyparancs: Ctrl+k Range("A1").Value = "Ksztette" Range("B1").Value = "Kovalcsik Gza" Range("A2").Value = "Vllalat" Range("B2").Value = "Help Key Bt" End Sub

Ezzel valban rvidebb, ttekinthetbb tettk az eljrst, de mg van mit csinostani rajta. Pldul a felhasznl s a vllalata nevt lekrdezhetjk az Application objektumbl. Ez azrt jobb, mert gy a makr brhol a tnylegesen regisztrlt felhasznl nevt fogja a megfelel cellba rni. A ksz eljrs teht gy fog mutatni:

162

14. fejezet

Makr ksztse felvtellel

Sub Ksztette_megoldasa() ' ' Ksztette Makr ' Rgztette: Kovalcsik Gza, dtum: 2005 ' ' Billentyparancs: Ctrl k ' Range("A1").Value = "Ksztette" Range("B1").Value = Application.UserName Range("A2").Value = "Vllalat" Range("B2").Value = Application.OrganizationName End Sub

CD mellklet 14 Fejezet
Rogzites_1.xls

Adattartomny keretezse
Ksztsnk felvtellel olyan makrt, amelyik bekeretez s megvonalaz egy tetszleges mret adattartomnyt. A felvtelt gy ksztsk el, hogy amikor futtatjuk, akkor kpes legyen brmekkora adattartomnyon mkdni. A felvtelt a Personal.xls fjlba hozzuk ltre. A felvtel elksztshez hozzunk ltre egy adattartomnyt. Ebben llva fogjuk elindtani a felvtelt.
Krlmnyek
A makr felvtel krlmnyeit neknk kell megteremtennk. Most pldul egy adatokkal kitlttt tartomnyt.

CD mellklet 14 Fejezet
Rogzites_2.xls

46. bra: Adattartomny keretezse elkszt lpsei

163

Az Excel objektumai

3. rsz

1. Jelljnk ki egy tbb cellbl ll tetszleges mret tartomnyt. 2. rjuk az ppen aktv cellba a Tart szveget. 3. ssk le a CTRL+ENTER billentykombincit. A felvtel elkezdse eltt lljunk az adattartomny egyik celljra. A sikeres felvtel rdekben lpsrl lpsre pontosan hajtsuk vgre a formzst. Kezdjk el a rgztst! Figyeljnk arra, hogy a felvtel megkezdse eltt az adattartomny egyik celljn lljunk, ahogy ezt a 46. bra is szemllteti. 1. Vlasszuk ki az Eszkzk (Tools) Makr (Macro) j makr rgztse (Record New Macro) utastst. 2. A megjelen prbeszdpanelben adjunk nevet a felvtelre vr makrnak. Ez a nv a Keretezes legyen. A Makr helye (Store macro in) listapanelbl vlasszuk ki az Egyni makrmunkafzetben (Personal Macro Workbook) lehetsget. A belltsok utn kattintsunk az OK gombra. Amit mostantl csinlunk, azt az Excel rgzti egy Keretezes nev eljrsban. 3. ssk le a CTRL+* billentykombincit. Ezzel kijelljk az aktulis adattartomnyt. 4. Vlasszuk ki a Formtum (Format) Cellk (Cells) utastst. 5. Lapozzunk a Szegly (Border) lapra. 6. A tartomny kls kerett lltsuk be ketts vonalra. 7. Rajzoljunk egybefgg vonalat a cellk kz. 8. lltsuk meg a felvtelt, azaz kattintsunk a rgzts vge gombra. Nzzk meg a felvtel eredmnyt, s amennyire lehet egyszerstsk le a rgztett lpseket.
Sub Keretezs() Keretezs Makr Rgztette: Kovalcsik Gza, dtum: 2005 Selection.CurrentRegion.Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeLeft) .LineStyle = xlDouble .Weight = xlThick .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeTop)

164

14. fejezet
.LineStyle = xlDouble .Weight = xlThick .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeBottom) .LineStyle = xlDouble .Weight = xlThick .ColorIndex = xlAutomatic End With With Selection.Borders(xlEdgeRight) .LineStyle = xlDouble .Weight = xlThick .ColorIndex = xlAutomatic End With With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With End Sub

Makr ksztse felvtellel

Ez az eljrs bizony elg hosszra sikerlt ahhoz kpest, hogy alig lltottunk be valamit. Ezen van mit egyszersteni. Emlkezznk arra, hogy miket lltottunk be. Az Excel minden lltsi lehetsget rgztett, mg azokat is, amikhez hozz se nyltunk. De vegyk sorra a lpseket, s prbljuk elhagyni a felesleges sorokat.
Selection.CurrentRegion.Select

Az els sor az, amelyik kijelli az aktulis adattartomnyt. Ez a sor az eredmnye annak, hogy letttk a CTRL+* billentykombincit. A Selection kulcssz arra a tartomnyra hivatkozik, amelyik ppen ki van jellve. A CurrentRegion a kijellt Selection krnyezetben tallhat adattartomnyra hivatkozik, amit aztn a Select metdussal ki is jellnk. Erre szkksgnk van, ezt ne trljk. Lpjnk tovbb! Nzzk meg a kvetkez kt sort.
Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone

165

Az Excel objektumai

3. rsz

With End With


Ezzel az utastsprral egy objektum tbb tulajdonsgt is bellthatjuk.

Ez a cellkon keresztbe hzott vonalak jellemzit adja meg. De hiszen mi nem is hztunk a cellkba tls vonalat. Az rtk is xlNone, vagyis, hogy nincs ez a vonal. Ha nincs, akkor mirt kell belltani? Rviden szlva ez a kt sor teljesen felesleges ebben az eljrsban. Trljk is ki mindjrt. Nzzk meg a kvetkez belltst. Itt egy rdekes kulcsszt tallunk Ez a With s a prja az End With. Ezt az utastsprt arra hasznljuk, hogy ne kelljen tbbszr egyms utn megismtelnnk annak az objektumnak a hivatkozst, amelynek tbb tulajdonsgt is belltjuk. A kvetkez sorok az adattartomny bal szlre hzott vonal tbb jellemzjt is belltjk. Emlkezznk csak vissza, hogy mi mit is lltottunk. Csak s kizrlag a vonal tpust! Azt lltottuk be, hogy a tartomny bal szlre kerl vonal ketts vonal legyen. A tbbi lps felesleges:
With Selection.Borders(xlEdgeLeft) .LineStyle = xlDouble .Weight = xlThick .ColorIndex = xlAutomatic End With

Teht, a flkvrrel jellt sorokat akr ki is trlhetjk az eljrsbl. Igen m, de a With s End With sorok kztt mr csak egy tulajdonsg van. Akkor nincs szksg erre az utasts-prra. A fenti t sorbl teht egyetlen sor marad, ez pedig a kvetkez:
Selection.Borders(xlEdgeLeft).LineStyle = xlDouble

Hasonlan vgiggondolva a tartomny tovbbi szleinek a szeglyezst az eljrsunk vgl gy fog mutatni.
Sub Keretezs() Keretezs Makr Rgztette: Kovalcsik Gza, dtum: 2005 Selection.CurrentRegion.Select Selection.Borders(xlEdgeLeft).LineStyle = xlDouble Selection.Borders(xlEdgeTop).LineStyle = xlDouble Selection.Borders(xlEdgeBottom).LineStyle = xlDouble Selection.Borders(xlEdgeRight).LineStyle = xlDouble With Selection.Borders(xlInsideVertical) .LineStyle = xlContinuous .Weight = xlThin

166

14. fejezet
.ColorIndex = xlAutomatic End With With Selection.Borders(xlInsideHorizontal) .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic End With End Sub

Makr ksztse felvtellel

Most eljutottunk addig, hogy az adattartomny szleinek a szeglyezst ersen lervidtettk. Htramaradt a tartomny cellit elvlaszt vonalak formzsa. Ezekkel pont gy bnhatunk el, mint a tartomny szlre hzott vonalakkal. Teht a flkvrrel jellt sorokbl ennyi marad!
Sub Keretezs() Keretezs Makr Rgztette: Kovalcsik Gza, dtum: 2005 Selection.CurrentRegion.Select Selection.Borders(xlEdgeLeft).LineStyle = xlDouble Selection.Borders(xlEdgeTop).LineStyle = xlDouble Selection.Borders(xlEdgeBottom).LineStyle = xlDouble Selection.Borders(xlEdgeRight).LineStyle = xlDouble Selection.Borders(xlInsideVertical).LineStyle = _ xlContinuous Selection.Borders(xlInsideHorizontal).LineStyle = _ xlContinuous End Sub

Vajon ezen mg lehet egyszersteni? Mindenkppen! Nzzk meg az els sort! Ott az ll, hogy jelljk ki az aktulis cellk krl tallhat adattartomnyt. Aztn a kijellt tartomnnyal vgezzk el a belltsokat. Tnyleg ki kell jellni a tartomnyt ahhoz, hogy bekeretezzk? Nem! Elegend csak hivatkozni. A msodik sortl kezdve a Selection hivatkozsokat cserljk le Selection.CurrentRegion hivatkozsra. Az eljrsunk ilyenn vlik:
Sub Keretezs() Keretezs Makr Rgztette: Kovalcsik Gza, dtum: 2005

167

Az Excel objektumai
Selection.CurrentRegion.Borders(xlEdgeLeft).LineStyle = _ xlDouble Selection.CurrentRegion.Borders(xlEdgeTop).LineStyle = _ xlDouble Selection.CurrentRegion.Borders(xlEdgeBottom).LineStyle = _ xlDouble Selection.CurrentRegion.Borders(xlEdgeRight).LineStyle = _ xlDouble Selection.CurrentRegion.Borders(xlInsideVertical).LineStyle = xlContinuous Selection.CurrentRegion.Borders(xlInsideHorizontal).LineStyle _ = xlContinuous End Sub

3. rsz

Most hasznljuk a With End With utastsprt, s ezzel elrtnk a ksz eljrshoz. A vgeredmny teht ez:
CD mellklet 14 Fejezet
Rogzites_2.xls

Sub Keretezs_megoldas() Keretezs Makr Rgztette: Kovalcsik Gza, dtum: 2005 With Selection.CurrentRegion .Borders(xlEdgeLeft).LineStyle = xlDouble .Borders(xlEdgeTop).LineStyle = xlDouble .Borders(xlEdgeBottom).LineStyle = xlDouble .Borders(xlEdgeRight).LineStyle = xlDouble .Borders(xlInsideVertical).LineStyle = xlContinuous .Borders(xlInsideHorizontal).LineStyle = xlContinuous End With End Sub

Teht a felvtel finomtsa sorn szabaduljunk meg a felesleges soroktl, majd a kijellseket rjuk t gy, hogy azokbl hivatkozs legyen. Ha lehetsg van r, hasznljuk a With.. End With utastsprt.

168

14. fejezet

Makr ksztse felvtellel

Jelents kiegsztse
Tegyk fel, hogy tbbszr is kapunk olyan listkat, amelyekben nincsenek teljesen kitltve a sorok. A lista egyes oszlopaiba, csak akkor rnak be adatot, ha attl kezdve megvltozik az oszlop rtke. Radsul minden esetben ms a mrete a listnak. Nem ugyanannyi a sorok vagy oszlopok szma.
CD mellklet 14 Fejezet
Rogzites_3.xls

47. bra: A flksz jelentst gy szeretnnk kiegszteni Teht a 47. bra bal oldaln lthat lista elrendezsbl szeretnnk a jobb oldalon lv llapotot ltrehozni. Erre tbb mdszer is van egyik gyorsabb, a msik lassabb, de valahogy mgiscsak eredmnyre juthatunk. Els lpsknt jelljk ki a tartomny res cellit. 1. lljunk a tartomny egyik celljra, olyan helyre, hogy a cellban legyen adat. 2. ssk le a CTRL+* billentyket. Ezzel kijelltk az aktulis adattartomnyt. 3. Hajtsuk vgre a Szerkeszts (Edit) Ugrs (Go To) parancsot. 4. A megjelen Ugrs panel aljn tallunk egy gombot, melynek a felirata Irnytott (Special). Ha erre rkattintunk, akkor megjelenik egy jabb panel, amelyben hasznos kijellseket vlaszthatunk. 5. Ebben a panelben jelljk ki az res cellk (Blank Cells) vlasztgombot, s kattintsunk a panel OK gombjra. Teht most ott tartunk, hogy kijelltk az sszes res cellt (170. oldal 48. bra). rjunk az sszes cellba egy olyan kpletet, amelyik a felette tallhat cella rtkt jelenti meg. Ehhez hajtsuk vgre a kvetkez lpseket:

169

Az Excel objektumai

3. rsz

48. bra: az adattartomny res cellnak a kijellse 1. rjunk be az aktv cellba egy egyenlsg jelet. 2. A billentyzeten ssk le a felfel mutat nyl billentyt. 3. ssk le a CTRL+ENTER billenty-kombincit. s mr ki is tltttk a listt. Mg szntessk meg a cellkba rt kpelteket. Ehhez: 1. jelljk ki az egsz adattartomnyt a CTRL+* billenty-kombincival. 2. ssk le a CTRL+C billentyket, ezzel a tblzatunkat a vglapra helyeztk. 3. Most irnytott beillesztssel tegyk vissza az adatainkat ugyanarra a helyre. Szerkeszts (Edit) Irnytott beilleszts (Paste Special). 4. A megjelen prbeszdpanelbl vlasszuk ki az rtket (Value) lehetsget. 5. Szntessk meg a msols villog jeleit az ESC billenty segtsgvel. Nos, ha mindezzel vgeztnk, akkor most mr ideje makrknt rgzteni ezt a tbb lpsbl ll mveletsort. Tegyk is meg s nzzk meg a felvtel eredmnyt. A program mindssze ennyi:
Sub JelentesKitolt() JelentesKitolt Makr Rgztette: Kovalcsik Gza, dtum: 2005

170

14. fejezet

Makr ksztse felvtellel


CD mellklet 14 Fejezet
Rogzites_3.xls

Selection.CurrentRegion.Select Selection.SpecialCells(xlCellTypeBlanks).Select Selection.FormulaR1C1 = =R[-1]C Selection.CurrentRegion.Select Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, _ Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Application.CutCopyMode = False End Sub

Ha megnzzk a felvtel eredmnyt itt nem is sokat kell egyszersteni az eljrson. Ezt nllan oldjuk meg.

sszegezve
Makr rgztssel egyszer feladatokat oldhatunk meg. Ezt az eszkzt felhasznlhatjuk arra is, hogy megismerkedjnk az egyes objektumok metdusaival, tulajdonsgaival. A feladat egyszer elksztnk egy makr felvtelt, majd az eredmny kielemezve beptjk a programunk megfelel helyre. A Makr rgzts az egyik legnagyobb tantmester, ha az objektumok tulajdonsgait s metdusait hasznlatt szeretnnk a magunkv tenni. Egy-egy sszetett makr elksztsnek lehet az els lpse az, hogy felvtellel rgztjk azokat a mveleteket, amelyeket szeretnnk vgrehajtani, majd ezt kiegsztjk vezrl utastsokkal.

171

15. fejezet

Vezrls esemnyekkel

int azt lttuk a programvezrl utastsokkal foglalkoz fejezetben, az utastsok a vgrehajtst klnbz felttelekhez kthettk. Ezt gy tehettk meg, hogy a program vltozit vizsgltuk s ezek pillanatnyi rtktl fggen hajtottunk vgre ms-ms utastscsoportokat. A mveletek vgrehajtst az objektumok esemnyeinek bekvetkezsvel is vezrelhetjk. gy pldul, meghatrozhatjuk azt, hogy milyen utastsokat hajtson vgre a program, amikor megnyitunk egy munkafzetet, vagy mi trtnjen, ha az egyik munkalaprl egy msikra lapozunk. Az esemnyeket, az objektumok kszti hatroztk meg, vagyis mi az elre meghatrozott esemnyeket hasznljuk. Ebben a fejezetben ismerkedjnk meg az esemnyek kezelsvel. A krdsek a kvetkezk: w w w w Hol talljuk az esemnyeket? Milyen esemnyei vannak az Excel objektumainak? Honnan tudjuk az esemny utni llapotot? Mire hasznljuk fel az objektumok esemnyeit?

Az objektumok esemnyei
Kezdjk az ismerkedst egy egyszer pldval. Nyissunk meg egy munkafzetet s lpjnk t a programozsi krnyezetbe. Ennek legegyszerbb mdja, ha letjk az ALT+F11 billenty-kombincit. Azt mr lttuk, hogy kell elkezdeni egy j modult, most ismerkedjnk meg azzal, hogy hogyan hasznlhatjuk az objektumok elre elksztett moduljait. Amint tkapcsoltunk a programozsi krnyezetbe, vegyk szemgyre a projekt ablakot. Itt megtalljuk az egyes munkalapokhoz s a munkafzethez tartoz modulok ikonjait. Ezek az adott munkafzet lapjainak a nevt viselik. A munkafzet moduljt ThisWorkbook-nak nevezte el a program. Kattintsunk kettt az egyik munkalap ikonjra (174. oldal 49. bra). Azt tapasztaljuk, hogy megnylik egy modul. Ez mr akkor is a 173

Esemnyek
Az esemnyeket esemnyvezrelt eljrsokban valstottk meg. Ezeket az objektumok moduljaiban talljuk.

Az Excel objektumai

3. rsz

munkafzet rsze volt, amikor megnyitottuk a munkafzetet. A modul baloldali listjt nyissuk le. Ez az objektum lista. Itt vlasszuk ki a Worksheet lehetsget.

49. bra: Jelentsk meg az esemnyvezrelt eljrsokat Ezutn az ablak jobboldali listjbl kivlaszthatjuk azokat az esemnyeket, amelyekhez programot szeretnnk rni. Amint a listbl kivlasztjuk a kiszemelt esemnyt, a modullapon megjelenik egy esemnyvezrelt eljrs. Ebbe az eljrsba kell lernunk azokat az utastsokat, amelyeket akkor szeretnnk vgrehajtani, amikor az adott esemny bekvetkezik. Az esemnyeket minden munkalapon megtalljuk, gy ez munkalaponknt lehet ms s ms. Munkalap esemnyek w Amint a baloldali objektum listapanelbl kivlasztottuk a Worksheet objektumot, rgtn megjelenik a munkalapok alaprtelmezett esemnyvezrelt eljrsa, a SelectionChange. Ez az esemny akkor kvetkezik be, amikor megvltoztatjuk a munkafzet cellinak a kijellst. Vagyis amint az egyik tartomny helyett egy msikat jellnk meg. Vegyk egy kicsit szemgyre ennek az esemnynek a szerkezett. Figyeljk meg, hogy az eljrs neve mgtti zrjelben vltoz, vagy vltozk vannak. Mit kezdhetnk a vltozkkal? Ezek a vltozk a krnyezetrl adnak t adatot ennek az eljrsnak. Az tadott rtkeket megvizsglhatjuk, s a vltozk tartalmtl fggen vezrelhetjk a programot. A SelectionChange esemnyben ez az rtk a Target, ebbl a vltozbl azt tudhatjuk meg, hogy a jells megvltoztatsa utn melyik az jonnan kijellt tartomny. Ebben az esemnyben klnbz mveleteket hajthatunk vgre az jonnan kijellt Target objektummal. Prbaknt rjunk egy egyszer parancsot az esemnybe. A kijellt tartomny vagy cella httert sznezzk be srgra, amint kijelljk az

Esemnyek paramterei
Az esemnyvezrelt eljrsok paramterei adatot adnak t az esemnyvezrelt eljrsnak.

174

15. fejezet

Vezrls esemnyekkel
CD mellklet 15 Fejezet
Esemeny_1.xls

adott tartomnyt. Ezt egyetlen utastssal megvalsthatjuk. me az eljrs:


Private Sub Worksheet_SelectionChange(ByVal Target As _ Excel.Range) Target.Interior.ColorIndex = 6 End Sub

Miutn az utastst bertuk az els munkalap SelectChange eljrsba, kapcsoljunk t az Excelbe. Jelljnk ki nhny tartomnyt. Figyeljk meg, hogy a kijellt tartomnyok httrszne a jells megvltoztatsnak hatsra srga lesz. Ez a SelectionChange esemnybe rt utasts eredmnye. Megprblhatjuk, mi trtnik egy msik munkalapon a jells megvltoztatsa utn. Az eredmny semmi. Ez azrt van, mert csak az egyik munkalap esemnyt programoztuk. Munkafzet esemnyei w Ha azt szeretnnk, hogy egy adott munkafzet minden lapja ugyangy viselkedjen a jells megvltoztatsa, akkor ehhez nem kell minden munkalap SelectChange esemnyt kln-kln utastsokkal elltni, hanem a munkafzet megfelel esemnyt kell programoznunk. Ennek a megrtsre is ksztsk el ugyanezt a vlaszt a jells megvltoztatsra. A munkalap SelectChange eljrsbl trljk a bert utastst.

50. bra: A munkafzet esemnyei Zrjuk le a munkalap moduljt, majd nyissuk meg a munkafzet objektum moduljt. A projekt ablakban kattintsunk kettt a munkafzet moduljra (ThisWorkbook). Most is nyissuk le a baloldali listt. Vltsunk t a Workbook objektumra. A jobboldali listban most az Open esemny az

175

Az Excel objektumai
CD mellkllet 15 Fejezet
Esemeny_2.xls

3. rsz

alaprtelmezett. Nyissuk le a modul jobb oldali esemnylistjt s vlasszuk ki a SheetSelectionChange esemnyt. Ide rjuk be az elbbi utastst. Az esemny teht ilyen kpet fog mutatni:
Private Sub Workbook_SheetSelectionChange _ (ByVal Sh As Object, ByVal Target As Excel.Range) Target.Interior.ColorIndex = 8 End Sub

Most visszalapozhatunk az Excel-be s kiprblhatjuk a munkafzet brmelyik munkalapjn a jells megvltoztatst. Azt fogjuk tapasztalni, hogy a jells megvltoztatsa esemny minden munkalapon tsznezi a kijellt cellkat. Vagyis ha egy-egy esemny bekvetkezsre nem csak egy munkalapon szeretnnk a sajt programunkkal reaglni, akkor a munkafzet megfelel esemnyt kell utastsokkal elltnunk. Termszetesen itt mr tbb krnyezeti adatot kapunk. Az Sh arra a munkalapra mutat, amelyiknek megvltoztattuk a tartomny kijellst. Mi most is csak a Target krnyezeti vltozt fogjuk hasznlni. Most mr a munkafzet brmelyik lapjn ugyanaz trtnik, amikor megvltoztatjuk a tartomny kijellst. Teht attl fgg, hogy melyik esemnyt fogjuk programozni, hogy egy munkalapra vagy a munkafzet minden lapjra szeretnnk rvnyesteni az esemnyben lert utastsokat.

Esemnyek alkalmazsa
Oldjunk meg nhny egyszer, szemlltet pldt az esemnyek programozsrl. Ezekbl kiderl, hogy miknt hasznlhatjuk fel az esemnyvezrelt eljrsokban kvlrl kapott rtkeket. Az els pldban programozzuk gy az egyik munkalapot, hogy annak az els kt oszlopban tallhat cellkat semmilyen mdon ne lehessen kijellni. Ha a felhasznl mgis az els kt oszlop valamelyik celljra kattintana, akkor automatikusan lpjnk t a harmadik oszlopba. Ott az a cella legyen aktv, amelyik sorba a felhasznl bele kattintott. A plda clja az, hogy megismerjk a kls Target vltoz hasznlatt. Olyan mdon kell megrnunk a programot, hogy amikor nem az els vagy msodik oszlopba kattint a felhasznl, akkor ne trtnjen semmi. Nyissunk meg egy j munkafzetet. Lpjnk t a VBE-be. Nyissuk ki a Munka1 munkalaphoz tartoz modult. A SelectionChange esemnyvezrelt eljrsba rjuk be a kvetkez programot:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column < 3 Then Cells(Target.Row, 3).Select End If

CD mellklet 15 Fejezet
Esemeny_3.xls

176

15. fejezet
End Sub

Vezrls esemnyekkel

Ahogy lthat a Target egy Range tpus hivatkozs. Vagyis pont ugyanazok a tulajdonsgai, mint brmelyik Range hivatkozsnak. Azt, hogy egy kijellt tartomny jobb fels cellja melyik oszlopba esik, a Range objektum a Column tulajdonsga rulja el. Ezt a lehetsget kihasznlva megvizsgljuk, hogy az jonnan kijellt tartomny bal fels cellja benne van-e a munkalap els kt oszlopban. Ha igen, akkor tlpnk a harmadik oszlopban vele azonos sorban lv cellra. rjuk meg a kis programot, s prbljuk ki a mkdst. Ha brmely tartomny kijellshez szeretnnk programot rni, akkor ljnk azzal a lehetsggel, hogy a Target tartomny jellemzihez hozzfrnk. Megllapthatjuk, hogy hnyadik sorban s oszlopban kezddik. Ahogy azt is megtudhatjuk, hny soros s oszlopos a Target. Nzznk egy msik pldt! Ebben azt prbljuk ki, hogy az esemnyvezrelt eljrsokbl hogyan lehet rtket visszaadni az objektumnak. rdekes mdon erre az esemnyvezrelt eljrs zrjelei kz rt vltozkat hasznlhatjuk fel. Ha a munkafzet tetszleges celljra kettt kattintunk, akkor a cella tmegy szerkesztsi llapotba. A ketts kattints esemnyhez a BeforeDoubleClick eljrst programoztk. rjunk most egy olyan kiegszt programot, amelynek a segtsgvel egy inputbox fggvnyben megadott rtket runk abba a cellba, amelyre kettt kattintott a felhasznl. Termszetesen, miutn az inputbox fggvnnyel kitltttk a cellt, nincs szksg arra, hogy tkerljnk szerkesztsi llapotba. A felhasznli felleten a ketts kattints eredmnye az, hogy az adott cellt tvltjuk szerkesztsi llapotba. Mivel az inputbox adatt rjuk a cellba nincs szksg arra, hogy az adat bersa utn tvltsunk szerkesztsi llapotba. Arra, hogy a cella feltltse utn ne kerljn a cella szerkesztsi llapotba, a BeforeDoubleClick esemny Cancel vltozjt fogjuk felhasznlni. A programban hatrozzuk meg azt is, hogy a mveletet csak a munkalap msodik oszlopban a msodik sortl vgezze gy az Excel. Nzzk az eljrst! Nyissuk meg a munkafzet msodik munkalapjhoz tartoz modult. Vlasszuk ki a BeforeDoubleClick esemnyvezrelt eljrst. Ebbe rjuk be a kvetkez sorokat:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, _ Cancel As Boolean) Dim varAdat As Variant Const STR_UZENET As String = Milyen adatot rjak a cellba? Const STR_CIM As String = Szerkeszts If Target.Column = 2 And Target.Row > 1 Then varAdat = InputBox(STR_UZENET, STR_CIM, Target.Value) Target.Value = varAdat Cancel = True

Visszaadott rtk
Az esemnyekbl rtket is adhatunk vissza. Erre az esemny egyik msik paramtert hasznlhatjuk fel.

CD mellklet 15 Fejezet
Esemeny_4.xls

177

Az Excel objektumai
End If End Sub

3. rsz

Ha ez az esemny bekvetkezik, megjelenik egy inputbox prbeszdpanel. Ebbe berhatunk egy tetszleges rtket. Amint a panel OK gombjra kattintunk, az adat bekerl abba a cellba, amelyikre kettt kattintottunk. Ha az eljrs utols sorban nem adtunk volna True rtket a Cancel vltoznak, akkor az adat bersa utn, a kivlasztott cella, szerkesztsi llapotba kerlne. Mivel a Cancel vltoznak az if-en bell adtunk rtket, a tbbi cellban nem vltozik meg a ketts kattints hatsa.

Egyb esemnyek
Programozs sorn hasznlhatunk olyan esemnyeket is, amelyek nem kapcsoldnak objektumhoz. Ezeket egy-egy utastssal lehet aktvv tenni. Az aktivl utasts kiadsa kzvetlenl nem hajt vgre mveletet, de ha bekvetkezik az esemny amelyiknek a figyelst elindtottuk, akkor egy ltalunk meghatrozott eljrst indthatunk el. OnTime w Az OnTime esemnyt idztsre hasznlhatjuk. Megtehetjk pldul, hogy egy eljrst egy adott idpontban futtassunk le, vagy egy adott id elteltvel. Ehhez ksztsnk egy egyszer pldaprogramot. A program a segtsgvel egy kisiskols gyakorolni tudja az sszeadst. A program adjon fel egy sszeadsi feladatot, majd egy meghatrozott id eltelte utn rja ki az sszeads eredmnyt. Ennek a feladatnak az a clja, hogy megismerjk az idzts esemny hasznlatt. Elszr mg csak gondolatban, egyszer mondatokkal fogalmazzuk meg a program lpseit. 1. Tegynk rendet: az esetleges korbbi feladatok eredmnyeit tntessk el a cellkbl. 2. Egy-egy vltozban rgztsk a kt szmot, (bytA,bytB) amit ssze kell adni. A szmok egy s tz kztti egsz rtket vehegynek fel. 3. Vgezzk el az sszeadst. Ennek az rtkt egy harmadik vltozban troljuk (bytC). 4. rjuk ki a feladatot. 5. lltsuk be a vrakozsi idt. Ha letelt, akkor hajtsuk vgre azt az eljrst, amelyik kirja az sszeads eredmnyt. Fogjunk hozz a program megrshoz. A feladat megoldsa kt eljrs lesz. Az egyik feladja a feladatot, a msik egy meghatrozott id elteltvel kirja a megoldst. Kezdjnk egy j munkafzetet. Nyissuk meg a VBE programot. Az j munkafzetben hozzunk ltre egy j program modult. Ebbe az j modulba

178

15. fejezet

Vezrls esemnyekkel
CD mellklet 15 Fejezet
Esemeny_5.xls

kezdjk el rni az j eljrst. A neve Gyakorls legyen, teht rjuk le, hogy Public Sub Gyakorls.
Dim bytA as Byte Dim bytB as Byte Dim bytC as Byte Public Sub Idozites() 'Az eredmnyt tartalmaz cellk trlse Range("A1:C2") = "" 'A szmok ellltsa veletlenszm fggvnnyel bytA = Int(Rnd(1) * 10) + 1 bytB = Int(Rnd(1) * 10) + 1 'Az eredmny kiszmtsa bytC = bytA + bytB 'A feladat kiratsa Range("A1") = bytA Range("B1") = bytB 'A vlasz cella kivlasztsa Range("C1").Select 't msodperc mlva rja ki az eredmnyt Application.OnTime Now + TimeValue("00:00:05"), "EredmKiir" End Sub

Ebbl az egsz feladatbl az eljrs utols sora az, amit ennl a feladatnl meg kell beszlnnk. Az OnTime egy esemny figyelst lltja be. Ha az OnTime kulcssz mg a TimeValue fggvnyben egy pontos idt runk, akkor a kvetkez paramterknt megadott eljrst a megjellt idben fogja vgrehajtani az Excel. Ez azt jelenti, hogy a program figyeli az idpont bekvetkezse esemnyt, s amikor elrkezik a megfelel pillanat, akkor vgrehajtja az EredmKiir eljrst. A mi esetnkben azonban nem tudjuk elre, hogy mikor kezd gyakorlsba a programunk felhasznlja. Itt azzal a mdszerrel lltjuk be a jelenlegi pillanattl szmtott t msodpercet, hogy a Now rtkhez ez az aktulis jelenlegi idpont hozzadunk t msodpercet. Most nzzk meg azt az eljrst, amelyik kirja az eredmnyt:
Sub EredmKiir() Range("E2") = bytC End Sub

CD mellklet 15 Fejezet
Esemeny_5.xls

OnKey w Ezzel az utastssal egy-egy kivlasztott billenty letst figyeltethetjk a programban. Hasonlan az OnTime idpont figyelst bellt utastshoz, itt is meghatrozhatjuk, hogy melyik billenty letse, me-

179

Az Excel objektumai

3. rsz

lyik eljrs futtatst vltsa ki. Ezzel a figyelssel a billentyzet tetszleges gombjhoz eljrst rendelhetnk. Ezt az esemnyfigyelst is egy kis pldval ismerjk meg. Az elz feladatot folytassuk azzal, hogy amikor a program kirja az eredmnyt, akkor krdezze meg a program hasznljt, hogy kr-e jabb gyakorl feladatot. Ha kr, akkor ismt hajtsuk vgre azt az eljrst, amelyik a feladatot feladja, ha nem akkor bcszzunk el. A vlaszadst rendeljk hozz egy-egy billentyhz, pldul az i bet letse igen vlaszt jelentsen, az n bet pedig nem vlaszt. Az eredmny kirs eljrst bvtsk ki a kvetkez utastsokkal.
Sub EredmKiir() Range("E2") = bytC Range("A3") = "Krsz jabb feladatot _ i = igen / n = nem" Application.OnKey "i", "Ujabb" Application.OnKey "n", "Vege" End Sub

Az utols kt utasts az, amelyikkel belltjuk az i illetve az n bet letsnek a figyelst. A vgrehajtand eljrs nevt az utastssor vgn idzjelek kz kell rnunk. Most nzzk meg azt az eljrst amit a megfelel bet letse utn hajtunk vgre.
Sub Ujabb() Application.OnKey "i" Application.OnKey "n" Gyakorls End Sub Sub Vege() Application.OnKey "i" Application.OnKey "n" Range(A3") = "Szia majd legkzelebb ismt talkozunk!" End Sub

Az els kt utastssal megszntetjk a kt bet figyeltetst. Ha ezt nem tennnk, akkor ezentl nem hasznlhatnnk a kt bett msra, csak arra, hogy a Vege s Ujabb eljrsokat elindtsuk. Az Ujabb eljrsban kzvetlenl indtjuk az jabb feladat feladst vgz eljrst, a Vege eljrsban pedig bcst vesznk a felhasznltl.

180

15. fejezet

Vezrls esemnyekkel

Futsidej hibakezels
Az eljrsokban objektumokat hasznlunk. Sok esetben nem tudhatjuk elre azt, hogy a hasznlni kvnt objektum a futtatskor a felhasznl rendelkezsre fog-e llni. Ha nincs meg minden eszkz azok kzl, amit a program hasznlna, akkor a program hibt fog jelezni. A programunknak megoldsokat kell adnia a felhasznlnak s nem feladatokat. Vagyis ne krjk meg a felhasznlt arra, hogy hozza ltre a program futtatshoz szksges krnyezetet. Errl neknk kell gondoskodnunk. Fel kell mrnnk azt a lehetsges krnyezeti hinyossgot, ami a program j mkdst megakadlyozn. Ezeket neknk kell korriglni futs kzben. A hiba ugyangy esemny, mint a tbbi esemny, legalbbis abban az rtelemben mindenkppen, hogy elre nem tudjuk meghatrozni, hogy mikor kvetkeznek be. Az elre felmrhet hibkat futs kzben kell kezelnnk. Ennek rdekben fel kell kszteni az eljrsokat arra, hogy a hibk kezelst mi programozhassuk. Az utasts amivel tvehetjk az Excel-tl a hibk kezelst, az On Error Go To cmke utasts. Ha ezt els utastsknt rjuk, akkor a program futsa kzben bekvetkez sszes hibt mi kezelhetjk le. A hiba figyelse minden esetben attl a sortl trtnik, ahova bertuk az On Error utastst. A hibt vagy az eljrs vgig figyelhetjk, vagy az On Error GoTo 0 utastssorig. A hibakezel rszben ltrehozhatjuk azt az objektumot, ami a program futtatshoz szksges, vagy visszatrhetnk a program megfelel sorra. A tovbbi magyarzat helyett oldjunk meg egy egyszer pldt. Tegyk fel, hogy az egyik eljrsunkban egy munkalapra hivatkozunk. Nem tudhatjuk elre azt, hogy abban a munkafzetben, amelyikben ezt a mveletet vgre szeretnnk hajtani, valban van ilyen nev munkalap. Mg az is lehet, hogy valamikor volt, csak kzben a felhasznl trlte. Ha az eljrsunk nem ltez lapra hivatkozik, akkor a program hibajelzssel megll, s nem hajtja vgre az utna kvetkez utastsokat. Mi lehet a megolds? Megkrdezhetjk pldul a felhasznlt, hogy beszrjunk-e egy j munkalapot, vagy esetleg krdezs nlkl beszrhatunk egy j munkalapot, aminek a neve megegyezik a keresett lap nevvel s ismt megksrelhetjk vgrehajtani azt az utastst, ahol a hiba megtrtnt. Egy j munkafzetben hozzunk ltre egy modult s rjuk meg a kvetkez kis eljrst.
Sub LapNincs() Worksheets(Nincs).Range(A1") = Brmi adat" End Sub

Ugrs a hibakezelre
Az On Error Goto paranccsal elugorhatunk az eljrson bell arra a cmkre, amelyben a hibt szeretnnk feldolgozni.

181

Az Excel objektumai

3. rsz

Ebben az eljrsban egy Nincs nev munkalapra szeretnnk rni. Lehet, hogy korbban volt ilyen lap, de most nincs. gy az eljrs nem hajtA hiba szma
A bekvetkezett hiba szmt a hibazenetbl tudhatjuk meg.

51. bra: Az elem nincs a tartomnyban dik vgre, hanem hibazenettel lell. A hibazenetet vegyk tudomsul. Jegyezzk meg a hiba kdjt, erre ksbb mg szksgnk lesz. Ezutn kattintsunk a Vge [End] felirat gombra (182. oldal 51.bra). Hozzuk ltre azt a szerkezetet, ami kezelni tudja ezt a hibt. Az eljrs els sorba rjuk be az On Error utastst. Az eljrs vge el pedig rjuk be a cmkt amire a hiba bekvetkezse utn a programnak lpnie kell. A cmke mgtti rszre megrhatjuk a hiba kezelst vgz utastssort. Most csak annyit tesznk, hogy figyelmeztetjk a felhasznlt arra, hogy nincs olyan munkalap, amire dolgozni szeretne. A programot bvtsk ki a kvetkez sorral:
Sub LapNincs() On Error GoTo HibaLapNincs Worksheets("Nincs").Range("A1") = "Brmi adat" HibaLapNincs: MsgBox "A munkafzetben nincs ilyen munkalap" End Sub

Cmke hasznlata
Amennyire lehet kerljk a cmkk hasznlatt! A cmkt kettsponttal kell lezrni.

Visszatrs a hiba helyre


Ha a hibt lekezeltk visszatrhatnk oda, ahol a hiba bekvetkezett.

A Visual Basic a cmkt nem tekinti utastsnak, egyszeren tlp rajta s vgrehajtja a kvetkez utastst. Vegyk szre, hogy ha ez gy van, akkor a hibakezel rszt a programunk akkor is vgre fogja hajtani, ha nem kvetkezett be hiba. Ezrt a cmke el minden esetben be kell rnunk az Exit Sub parancsot, ami kilp az eljrsbl. Nzzk meg, hogy mi a teend, ha nemcsak jelezni szeretnnk a hinyossgot, hanem orvosolni is. A hiba bekvetkezsekor hozzunk ltre egy j munkalapot, aminek a neve az lesz amit hasznlni szerettnk volna. Ehhez a hibakezel rszbe az zenet helyre a kvetkez sort rjuk be:

182

15. fejezet
Worksheets.Add.Name = Nincs

Vezrls esemnyekkel

Ez az utasts beszrja az j munkalapot, de nem rja r azt a szveget, mivel befejezk az eljrst. Trjnk vissza arra a sorra, ahol a hiba bekvetkezett. Ezt a Resume 0 utastssal tehetjk meg. Teht most mr van megfelel munkalapunk, rrtuk a szveget. Mivel a hibt kezel utastsok a fenti utastsok utn kvetkeznek, a program szolgaian ezeket is vgre fogja hajtani. Ezt gy kerlhetjk el, hogy a hibakezel cmke eltt kilpnk az eljrsbl. Ha a hibakezelst gy hagyjuk, akkor minden bekvetkezett hiba esetn beszrunk egy j munkalapot az aktulis munkafzetbe s visszatrnk arra az utastsra, amelyik a hibt okozta. Ez azrt nem j, mert a hiba ismt bekvetkezik. Eredmnyknt megint a hibakezel utastsokra lpnk. Belthat, hogy ez gy az idk vgezetig krbejr, anlkl, hogy brmi is trtnne a gpnkn. Most oldjuk meg azt is, hogy ne minden hiba bekvetkezse esetn hajtdjanak vgre a hibakezel utastsok, csak akkor, ha a mi hibnk kvetkezik be. Ezt a hibakezel rszbe rt egyetlen If utastssal oldhatjuk meg.
Sub LapNincs() On Error GoTo HibaLapNincs Worksheets(Nincs).Range(A1") = Brmi adat" Exit Sub HibaLapNincs: If Err.Number = 9 Then Worksheets.Add.Name = Nincs Resume 0 Else Error Err End If End Sub

Kilps az eljrsbl
Azrt, hogy ne hajtsuk vgre a hibakezel rszt minden esetben, ki kell lpni az eljrsbl. Ha csak lehet ezt a mdszert is kerljk el!

Elemezzk ki a flkvr bets utastsokat. Az If Err.Number = 9 Then vizsglat azt a hibt engedi kezelni, amelyikre mi figyeltnk. Ezt a hibakdot az els futtatskor jegyezhettk fel. Ha tbb hibra is szmtunk,

akkor azoknak a kdjt is vizsglnunk kell. Az If szerkezet Else gban szerepl Error Err utastssor tovbbra is ugyanolyan hibazenetet fog adni, mint amikor nem mi kezeltk le a futs kzben elfordul hibkat. Termszetesen ez a program lellsval is fog jrni.

183

Kapcsolat a felhasznlval

4. rsz

A 4. rsz tartalmbl
Itt mr a bentfentesek biztonsgval hasznljuk a programozs eszkzeit, elindtjuk az ltalunk rt programokat. Tudunk mr olyan eljrsokat, fggvnyeket kszteni, amit tbben is szeretnnek hasznlni. Ha csak lehet, gy kell tadnunk msoknak a programjainkat hogy ugyangy hasznlhassk azokat, mintha az Excel rszei lennnek. Ebben a rszben azokat az eszkzket ismerhetjk meg, amelyek lehetv teszik az ltalunk rt programok terjesztst.

16. fejezet

zenetek, prbeszd

gyik-msik eljrsban szksg lehet arra, hogy az eljrs vgrehajtsa kzben tovbbi adatokat krdezznk a gp eltt l felhasznltl. Erre a kt legegyszerbb eszkz, az InputBox s az MsgBox utastsok. A prbeszd msik eszkze az Office segd Assistant lehet. Ez a Microsoft Office eszkze, gy minden Office alkalmazsban elrhetjk. Hasznlhatunk rlapokat is arra, hogy a felhasznl elvgezze az eljrs kzben szksges belltsokat. Ebben a fejezetben nhny egyszer plda segtsgvel megismerkednk a kapcsolatot megvalst eszkzkkel. A fejezet a kvetkez krdsekre ad vlaszt: w w w w Hogy hasznljuk az MsgBox fggvnyt? Milyen vltozatai vannak az InputBox fggvnynek? Hogyan hasznlhatjuk az Office segdet? Hogy hozhatunk ltre egyni rlapokat?

Egyszer zenetek
Visual Basic krnyezetben kt egyszer eszkz ll a rendelkezsnkre ahhoz, hogy zenetet kldjnk a felhasznlnak. Ezekkel nem csak zenhetnk, hanem adatot is krhetnk a felhasznltl. Ezzel a felhasznl kzvetlenl vezrelheti a program futst. Ezek az MsgBox s az InputBox. A Vezrls esemnyekkel cm fejezet vgn a Futsidej hibakezels szakaszban megprbltunk egy olyan munkalapra adatot rni, amelyik nem is volt a munkafzetben. Akkor a feladatot gy oldottuk meg, hogy senkitl nem krdeztnk semmit, hanem beszrtunk egy j munkalapot. Lehet, hogy a felhasznl nem gy tett volna, ha megkrdezzk a vlemnyt. Ezt megtehettk volna egy MsgBox utasts segtsgvel. Mieltt megoldannk a feladatot, vizsgljuk meg az MsgBox utastst. Tltsk be az Excel-t s kapcsoljunk t a Visual Basic Editor felletre.

187

Kapcsolat a felhasznlval

4. rsz

Kapcsoljuk be az Immedaite ablakot, s adjunk ki egy MsgBox parancsot. Kezdjk el begpelni a kvetkez sort:

52. bra: Az MsgBox panel megjelentsnek a bellsa Amikor elrnk az MsgBox msodik argumentumhoz, lenylik egy lista. Itt a program bels llandkat knl fel. Ebbl vlasztva meghatrozhatjuk, hogyan jelenjen meg az zenet. Ha pldul a vbCritical rtket vlasztjuk, akkor a panelen piros krcske jelenik meg, a vbInformation hatsra pedig az informci jellst fogjuk ltni. Ha ezek kztt a bels llandk kzl tbbet is kiprblunk, tallunk olyat is, amelynek a hatsra Igen-Nem gombok jelennek meg az MsgBox-ban. Ez a vbYesNo lehetsg. Ha ezek a gombok csak a megjelentst szolgljk, akkor nem sokra megynk velk. J lenne a programban annak megfelelen elgazni, hogy a felhasznl melyik gombra kattintott. Ha pldul az Igen-t vlasztotta, szrjuk be az j munkalapot, ha a Nem gombot vlasztotta lltsuk le az eljrst. Az MsgBox-ot ktflekppen hasznlhatjuk. Eddig csak a felhasznl tjkoztatsra hasznltuk, de nem volt fontos a szmunkra a felhasznl vlasztsa. Ahhoz, hogy ki tudjuk rtkelni a felhasznl vlaszt, az MsgBox fggvny vltozatt kell hasznlnunk. Ez pontosan ugyanazt tudja, mint az eljrs vltozat, csakhogy most visszakapjuk a felhasznl vlasznak megfelel rtket. Lnyeges klnbsg az, hogy most az argumentumokat zrjelek kztt kell felsorolnunk. Az Immedaite ablakban prbljuk ki a kvetkez utastssort:
MsgBox fggvny
Az MsgBox fggvny vltozatval nem csak zenhetnk, de vlaszt is kaphatunk a krdsinkre.

?msgbox(zenet szvege,vbyesno)

Miutn ENTER-t tttnk megjelenik a MsgBox. Kattintsunk egyszer az Igen gombra. Indtsuk el ismt s prbljuk ki mi a vlasz, ha a nem gombot tjk le. Igen gomb esetn 6, Nem esetn 7 a vlasz. Ezt az rtket trolhatjuk egy vltozban s egy If vezrlssel kirtkelve elgazhatunk.

188

16. fejezet

zenetek, prbeszd

Trjnk vissza eredeti clunkhoz. A Vezrls esemnyekkel cm fejezet vgn a Futsidej hibakezels szakaszban megprbltunk egy olyan munkalapra adatot rni, amelyik nem is volt a munkafzetben. Nem krdeztk a felhasznlt, hogy akarja vagy sem, beszrtuk az j munkalapot. Az eljrs az emltett fejezetben gy nzett ki:
Sub LapNincs() On Error GoTo HibaLapNincs Worksheets("Bort").Range("A1") = "Brmi adat" Exit Sub HibaLapNincs: If Err.Number = 9 Then Worksheets.Add.Name = "Bort" Resume 0 Else Error Err End If End Sub

Hasznljuk fel a most szerzett ismeretnket s krdezzk meg a felhasznlt az j munkalap beszrsrl. Ha kri, hajtsuk vgre a beszrst s a program tbbi rszt, ha nem lpjnk ki az eljrsbl. Bvtsk ki ezt a kvetkez mdon:
Sub LapNincs() Dim bytValasz As Byte On Error GoTo HibaLapNincs Worksheets("Bort").Range("A1") = "Brmi adat" Exit Sub HibaLapNincs: If Err.Number = 9 Then bytValasz = MsgBox _ ("Beillesszem a Bort nev munkalapot?", vbYesNo) If bytValasz = vbYes Then Worksheets.Add.Name = "Bort" Resume 0 Else Exit Sub End If Else Error Err End If End Sub

Az MsgBox vlasza
Ha a fggvny vlaszt egy vltozban troljuk, akkor azt ksbb felhasznlhatjuk.

189

Kapcsolat a felhasznlval

4. rsz

A Dim paranccsal meghatroztunk egy vltozt. Ebben fogjuk trolni a felhasznl vlaszt. A krdst az els flkvr sorban tesszk fel. Az MsgBox megjelenik, s rajta lesz az Igen s a Nem gomb. Ezt kveten az elgazunk a vlasznak megfelelen.
Bels llandk
Az MsgBox vlaszhoz tartz bels llandkat

If bytValasz = vbYes Then

Itt rdemes felfigyelni arra, hogy a vbYes bels llandt hasznltuk az sszehasonltskor. Hasznlhattunk volna akr vbNo llandt is, csak akkor msknt kellett volna megrni a programot. A bytValasz rtke akkor veszi fel a vbYes rtket, ha a felhasznl az Igen gombra kattint. Ellenkez esetben a vlasz rtke megegyezett volna a vbNo lland tartalmval. Ha teht a felhasznl az Igen gombra kattint, akkor beszrjuk az j munkalapot s visszatrnk a hibt okoz sorra. Vagyis sikeresen elvgeztk a berst. Ellenkez esetben ha a felhasznl nem kri az j lapot kilpnk az eljrsbl, hiszen nincs hova bernunk az adatot. Egy kis figyelmessg a felhasznlnak az, ha mg egy krdjelet is megjelentnk az MsgBox panelen. Megtehetjk, mert ezeket a bels llandkat gy talltk ki, hogy sszeadva egyik msik rtkt egyszerre kt megjelentst is bellthatunk. rjuk t az MsgBox sort a kvetkezre:
bytValasz = MsgBox _ (Beillesszem a Bort nev munkalapot?, vbYesNo+vbQuestion)

Assistant
Ez a kis mks figura az Office objektuma. Ennek a segtsgvel is kommuniklk hatunk a felhasznlval.

Office segd
Nyissunk meg egy res munkafzetet s kapcsoljunk t a programszerkesztbe. A jelenlegi munkafzetbe szrjunk be egy j modult. Az j modulba rjunk egy eljrst, amelyik figyelmezet zenetet kld. Az zenet megjelentsre hasznljuk a segd objektumot. rjunk egy egyszer pldt, amelyikben a segd megkrdezi, hogy lthatak legyenek-e a munkalap cellarcsai. Ha a felhasznl az igen gombra kattint, akkor jelentsk meg, ha a nem gombra, akkor rejtsk el a cellarcsokat.
Sub Racsok() Dim blnCellaRacs As Balloon Dim intValasz As Integer Const STR_CIME As String = "Cellarcsok" Const STR_KERDES As String = _ "Lthatak legyenek a cellarcsok?" Set blnCellaRacs = Assistant.NewBalloon Az zenetballon eloksztse

j ballon
Az zenet elksztshez ltre kell hoznunk azt a ballont, amiben majd az zenet lesz.

190

16. fejezet
With blnCellaRacs .Mode = msoModeModal .Heading = STR_CIME .Text = STR_KERDES .Button = msoButtonSetYesNo .Animation = msoAnimationGestureUp A vlasz eredmny megorzse intValasz = .Show End With A vlasz kirtkelse If intValasz = -3 Then ActiveWindow.DisplayGridlines = True ElseIf intValasz = -4 Then ActiveWindow.DisplayGridlines = False End If A piheno animci bellsa Assistant.Animation = msoAnimationIdle End Sub

zenetek, prbeszd

53. bra: Cellarcsok ki s bekapcslsa az Office segddel Az eljrs elindtsa utn a segd a kvetkezkppen fog megjelenni: Elemezzk ki az elksztett eljrst. Az eljrs els soraiban deklarljuk azokat a vltozkat s llandkat, amelyeket hasznlni fogunk. A blnCellaRacs vltoz segtsgvel leegyszerstjk az zenet hivatkozst. A intValasz vltozt a krdsre adott vlasz tmeneti megrzsre hasznljuk fel. A STR_CIME lland a ballon cme, mg a STR_KERDES a feltett krds szvege lesz.
Set blnCellaRacs = Assistant.NewBalloon

Az Assistant.NewBallon ltal ltrehozott objektumot ez egy ballon lesz elnevezzk a deklarlt blnCellaRacs nvvel. Ettl kezdve ezzel a

191

Kapcsolat a felhasznlval

4. rsz

nvvel hivatkozhatunk erre az objektumra. A kvetkez sorokban elksztjk az zenetet s a ballon megjelentst.
.Mode = msoModeModal

Ezzel az utastssorral azt lltjuk be, hogy amg az zenetre nem kaptunk vlaszt, addig ne lehessen ms mveletet vgrehajtani, vagyis, hogy a felhasznl ne tudjon a segd Assistant krdse kzben az Excel-hez hozzfrni. Az msoModeModal Microsoft Office llandt a program felknlja, mikzben a programot rjuk.
.Heading = STR_CIME

Ennek a tulajdonsgnak a belltsa az zenet ballon cmt adja. Erre az eljrs elejn deklarlt llandt hasznljuk fel ugyangy, mint az zenet-ballon szvegt megjelent Text tulajdonsg belltsa sorn.
.Button = msoButtonSetYesNo

A fenti utastssornak a feladata az, hogy az zenet megjelentse sorn az igen s a nem gombok megjelenjenek az zenet aljn. Ebben a sorban ismt egy Office llandt hasznltunk. Ezeket ismt a VBE knlatbl vlaszthatjuk ki.
.Animation = msoAnimationGestureUp

A segd klnfle animcikra kpes. Ezeket mi hatrozhatjuk meg azzal, hogy az Animation tulajdonsgnak megfelel rtket adunk. Ezek is a VBE ltal felknlt llandk alapjn vlaszthatk ki. Az llandk nevbl kiderl, hogy mit fog mvelni a kis segd.
intValasz = .Show

Ennek az utastssornak ketts szerepe van. Az egyik az, hogy megjelentse a segdet s az elksztett zenetet. A msik feladata pedig az, hogy a intValasz vltozban megrizzk a vlaszt. Ha vlaszknt az Igen gombra kattintunk, akkor a intValasz rtke -3 lesz, ha pedig a Nem gombra, akkor -4. A vltozban trolt rtkektl fggen vagy megjelentjk a cellarcsokat, vagy elrejtjk.
If intValasz = -3 Then ActiveWindow.DisplayGridlines = True ElseIf intValasz = -4 Then ActiveWindow.DisplayGridlines = False

192

16. fejezet
End If

zenetek, prbeszd

Ha a felhasznl az Igen gombra kattint, vagyis a vlasz rtke -3, akkor bekapcsoljuk a cellarcsokat, ha pedig a nem gombra, vagyis a vlasz -4, akkor kikapcsoljuk.
Assistant.Animation = msoAnimationIdle

Bizonyos animcik az utasts kiadsa utn is folyamatosan ismtldnek, ezrt tancsos visszalltani (Idle) vagyis resjrat llapotba tenni az animcikat. Jellngyzetek hasznlata w A kvetkez pldban tegyk lehetv, hogy a segd felhasznlsval az Excel belltsai kzl egyszerre tbb jellemzt is megvltoztasson a felhasznl. Ehhez jellngyzeteket fogunk megjelenteni a segd ballonjban. Ehhez a CheckBoxes tulajdonsgokat kell belltanunk. Ennek indexeltnek kell lennie, de tnl tbb jellngyzetet nem hasznlhatunk egy zenet sorn. Az eljrs elejn vizsgljuk meg az tlltani kvnt tulajdonsgok rtkt, s ezeknek megfelelen lltsuk be az zenet jellngyzeteit.
Sub Belltsok() Dim blnBeallitas As Balloon Dim intValasz As Integer Dim strSzovegek(4) As String Dim intI As Integer Const STR_CIME As String = "Egyedi belltsok" Const STR_KERDES As String = _ "Jelljk be a szksges belltsokat!" Set blnBeallitas = Assistant.NewBalloon strSzovegek(1) = "Cellarcsok" strSzovegek(2) = "llapotsor" strSzovegek(3) = "Szerkesztolc" strSzovegek(4) = "Munkalap flek" With blnBeallitas .Heading = STR_CIME .Text = STR_KERDES .Button = msoButtonSetOkCancel For intI = 1 To 4 .CheckBoxes(intI).Text = strSzovegek(intI) Next intI .CheckBoxes(1).Checked = ActiveWindow.DisplayGridlines .CheckBoxes(2).Checked = Application.DisplayStatusBar .CheckBoxes(3).Checked = Application.DisplayFormulaBar

Jellngyzet
Ha a ballon CheckBox objktum Text tulajdonsgnek rtket adunk, akkor a vlasztgomb megjelenik az zenetben.

193

Kapcsolat a felhasznlval
.CheckBoxes(4).Checked = ActiveWindow.DisplayWorkbookTabs intValasz = .Show If intValasz = -1 Then ActiveWindow.DisplayGridlines = .CheckBoxes(1).Checked Application.DisplayStatusBar = .CheckBoxes(2).Checked Application.DisplayFormulaBar = .CheckBoxes(3).Checked ActiveWindow.DisplayWorkbookTabs = .CheckBoxes(4).Checked End If End With End Sub

4. rsz

Az eljrs bersa utn lljunk az eljrs Sub utastsra s ssk le az F5-s funkcibillentyt. Ez ugyanis elindtja azt az eljrst, amit ksztettnk. A segd megjelenti a jellngyzeteket, s azokat a gombokat, amelyeket meghatroztunk. A jellngyzetek kzl brmelyiknek az rtkt megvltoztathatjuk. Ha az OK gombra kattintunk, akkor az eljrs vgrehajtja a megfelel belltsokat. Az eredmny a kvetkez lesz:

54. bra: Az Office segd ballonban megjelentett CheckBox-ok Elemezzk ki ennek az eljrsnak az utastsait is. Termszetesen az eljrs a vltozk s llandk deklarlsval kezddik. Ezutn a vltozk kezdeti rtkt lltjuk be, melyeket most ne elemezznk. Kezdjk a With blnBeallitas utastssortl. Elsknt tisztzzuk, hogy mi az a blnBeallitas. Egy korbbi sorban deklarltuk a blnBeallitas objektumvltozt. Ennek a vltoznak abban a sorban adtunk rtket, amelyik a Set kulcsszval kezddik. Itt blnBeallitas nvvel lttuk el a segd ballonjt. Ettl kezdve a ltrehozott j ballonra ezzel a nvvel hivatkozhatunk. A With kulcsszt mr korbban megismertk. Ennek az a feladata, hogy a mg rt objektum tulajdonsgait bellthassuk. Ezrt fogunk ponttal kezdd utastssorokat tallni. A pont mgtt tulajdonsgok vannak. Ezek el klnben minden esetben oda kellett volna rni a blnBeallitas objektumnevet. Teht ha most ponttal

194

16. fejezet

zenetek, prbeszd

kezddik egy sor akkor gondoljuk el a blnBeallitas-al azonostott Balloon objektumot. Ez mindaddig gy tart, amg el nem rnk az End With utastst tartalmaz sorig.
.Heading = STR_CIME .Text = STR_KERDES .Button = msoButtonSetOkCancel

Ezek a sorok az zenet cmt, szveges magyarzatt s a panel aljn megjelen gombokat hatrozzk meg. Az els kt utastsban felhasznlt llandkat az eljrs korbbi rszben deklarltuk, kivve a Button tulajdonsg belltshoz hasznlt mso kezdett. Ez az Office llandja, amit a VBE felknl a program rsa sorn. Ettl jelennek meg az zenet aljn az OK s Mgse gombok.

For intI = 1 To 4 .CheckBoxes(intI).Text = strSzvegek(intI) Next intI

Ebben a ciklusban a jellngyzetek szvegt adjuk meg. Ez a ChecBoxes objektum Text tulajdonsg belltsval trtnik. Ennek eredmnyeknt jelennek meg a jellngyzetek. Teht a jellngyzetek attl ltszanak, hogy a Text tulajdonsgnak rtket adunk. A CheckBoxes objektum indexe azt hatrozza meg, hogy hnyadik legyen a sorrendben a megjelentend jellngyzet. Teht a fenti ciklus ngy jellngyzetet fog megjelenteni, azokkal a feliratokkal, amelyeket korbban letroltunk a strSzvegek tmbben.
.CheckBoxes(1).Checked = ActiveWindow.DisplayGridlines .CheckBoxes(2).Checked = Application.DisplayStatusBar .CheckBoxes(3).Checked = Application.DisplayFormulaBar .CheckBoxes(4).Checked = ActiveWindow.DisplayWorkbookTabs

Ebben a ngy sorban a jellngyzetek kijelzst belltjuk a mdostani kvnt tulajdonsgok jelenlegi rtkeknek megfelelen. Erre azrt van szksg, hogy a felhasznl felmrhesse a pillanatnyi llapotot. Ezt nem oldhattuk meg ciklussal, gy egyenknt kellett elvgezni a belltsokat. Ha a jellngyzetek Checked tulajdonsgt True rtkre lltjuk be, akkor megjelenskkor bekapcsoltak lesznek. Ezeket az rtkeket most a megfelel tulajdonsgok felhasznlsval lltjuk be, gy a jellngyzetek tkrzik a krnyezeti belltsokat.
intValasz = .Show

195

Kapcsolat a felhasznlval

4. rsz

Ennek az utastssornak ismt ketts szerepe van. Az egyik az zenet megjelentse, a msik, hogy megrizzk azt az rtket, hogy melyik gombra kattintottunk. Ha az OK gomb volt az, akkor a intValasz vltoz rtke -1 lesz, ha a Mgse gomb volt az, akkor az eredmnye -2 lesz. A tovbbi mveleteket ennek a vltoznak az rtktl fggen hajtjuk vgre. Ha ugyanis az OK gombot vlasztotta a felhasznl, akkor vgrehajtjuk a jellngyzetben belltott vltoztatsokat, ha a Mgse gombra, akkor megtartjuk az eredetieket.
If intValasz = -1 Then ActiveWindow.DisplayGridlines = .CheckBoxes(1).Checked Application.DisplayStatusBar = .CheckBoxes(2).Checked Application.DisplayFormulaBar = .CheckBoxes(3).Checked ActiveWindow.DisplayWorkbookTabs = .CheckBoxes(4).Checked End If

Ha teht a intValasz rtke -1, akkor vltoztatunk. Ezrt vizsgljuk az If utastsban azt, hogy a intValasz rtke -1. Ha igen, akkor vgrehajtjuk a jellngyzetekben meghatrozott belltsokat. Ha az zenetben a Mgse gombra kattint a felhasznl, akkor a belltsokat vgz utastssorokat nem hajtja vgre a program. Az ezt kvet End With sor lezrja a blnBeallitas objektum tulajdonsgainak belltst s vizsglatt.

55. bra: Vlasztcsoport hasznlata w A vlasztcsoportbl egyet hasznlhatunk az Office segd zenetben. Tegyk fel, hogy egy cellba az engedmny mrtkt szeretnnk berni. A segd ballonjban vlasztcsoport hasznlatval maximum t vlasztgombot hasznlhatunk. Ezek a mi pldnkban legyenek a 2%, 5%, 8% , 10% s 12% rtkek. Ha a ballonban megjelen Mgse (Cancel) gombra kattintunk, akkor nem adunk engedmnyt. Vagyis 0% jelenjen meg az A1-es cellban. Most nem dolgozzuk ki a szmlz krnyezetet, elgedjnk meg annyival, hogy a vlaszts eredmnyt jele-

Vlasztcsoport
Az Office segdre elhelyezhetnk olyan gombokat is, amelyekbl csak egyet lehet egyszerre kijellni.

196

16. fejezet

zenetek, prbeszd

ntsk meg az A1-es cellban. Ennek a belltsra az Office segdet fogjuk hasznlni. Teht ezt szeretnnk megvalstani:
Sub Engedmeny() Dim blnEngedmeny As Balloon Dim intEredm As Integer Dim strSzazalek(5) As String Dim intI As Integer Const STR_CIME As String = Engedmny Const STR_KERDES As String = Hny szzalk? strSzazalek(0) = 0% strSzazalek(1) = 2% strSzazalek(2) = 5% strSzazalek(3) = 8% strSzazalek(4) = 10% strSzazalek(5) = 12% Set blnEngedmeny = Assistant.NewBalloon With blnEngedmeny .Heading = STR_CIME .Text = STR_KERDES .Button = msoButtonSetCancel For intI = 1 To 5 .Labels(intI).Text = strSzazalek(intI) Next intI intEredm = .Show If intEredm = -2 Then intEredm = 0 End If End With Range(A1") = strSzazalek(intEredm) End Sub

Az eljrs elejn deklarljuk a vltozkat s az eljrsban hasznland llandkat. Ezek hasznlatrl majd a programsorok rtelmezse sorn ejtnk szt.
Set blnEngedmeny = Assistant.NewBalloon

Ebben az utastssorban elnevezzk az Assistant.NewBalloon ltal ltrehozott objektumot blnEngedmeny nvvel. Ennek a feladata a hivatkozs leegyszerstse, amivel mr a korbbi feladatok megoldsnl is tallkoztunk. Az zenet elkszts els sora a With blnEngedmeny sor. Mint mr korbban is lttuk, a With utastst akkor hasznljuk, ha ugyanannak az ob-

197

Kapcsolat a felhasznlval

4. rsz

jektumnak tbb tulajdonsgt is szeretnnk megvltoztatni. Jelen esetben a segd ballonjnak a tulajdonsgait lltjuk be, amg a program r nem lp az End With utastssorra.
.Heading = STR_CIME .Text = STR_KERDES .Button = msoButtonSetCancel

Ebben a hrom sorban meghatrozzuk az zenet ballon cmt, zenetnek a szvegt s azt, hogy milyen gomb jelenjen meg az zenet aljn. A Heading tulajdonsg az zenet cmkje. Ennek az rtkt az eljrs elejn deklarltuk. A Text a ballonban megjelen krds szvege, amit szintn mr korbban meghatroztunk s vgl a gomb belltsra az Office llandk egyikt hasznltuk fel.
For I = int1 To 5 .Labels(intI).Text = strSzazalek(intI) Next intI

Ebben a hrom sorban meghatrozzuk a vlasztcsoport elemeinek a szvegt. Ennl tbbet nem is kell tennnk annak rdekben, hogy a vlasztgombok megjelenjenek a segd Assistant zenetben. A strSzazalek tmb rtkeit az eljrs deklarcis szakaszban mr meghatroztuk. Ez egy hat elem vektor. A nulladik elemt, majd arra fogjuk felhasznlni, hogy a mgse gomb lenyomsa esetn 0%-ot rjunk az A1-es cellba. Az intI ciklusszmll egytl tig vgiglpked a Labels objektumokon s a strSzazalek tmb elemeinek rtkvel feltlti azokat.
intEredm = .Show

Ez az utastssor megjelenti a segd zenett s a vlasztsunknak megfelelen egy szmot r a intEredm vltozba. Ez vagy a kivlasztott vlasztgomb sorszma lesz, vagy a Mgse gomb esetn -2.
If intEredm = -2 Then intEredm = 0 End If

Ha a Mgse gombra kattintott a felhasznl, akkor ennek megfelelen kell eljrnunk, vagyis az eredmny rtkt t kell rnunk nullra. Ez azt jelenti, hogy a vev nem kap rengedmnyt. Egybknt a intEredm vltozban annak a gombnak a sorszma lesz, amelyikre rkattintottunk.
Range(A1") = strSzazalek (intEredm)

198

16. fejezet

zenetek, prbeszd

A vlaszts utn berjuk az eredmnyt az A1-es cellba. Erre a korbban deklarlt strSzazalek vektort hasznljuk fel.

Prbeszdpanelek hasznlata
sszetettebb feladatokat egyedi prbeeszdpanelek, rlapok ltrehozsval oldhatunk meg. Itt mi hatrozzuk meg a panelek rszegysgeit. Ezzel teljesen egy adott feladathoz igazthatjuk a rlapokat. A paneleken vezrlseket alkalmazhatunk. Ezek szintn korbban elksztett objektumok.

Prbeszdpanel ltrehozsa
Lapozzunk t a VBE programba. A projekt ablakban az egr jobb gombjval kattintsunk r annak a projektnek az egyik elemre, amelyikben az rlapot szeretnnk elkszteni. A helyi menbl vlasszuk ki a Insert UserForm utastst. Az utasts vgrehajtsnak az lesz az eredmnye, hogy megjelenik egy rlap.

User form
Vagy magyarul prbeszbpanel, rlap.

56. bra: Felhasznli rlap ltrehozsa az Excelben Az rlapokon hasznlhat vezrlseket egyszeren gy helyezhetjk el az rlapon, mint egy rajzol programban. Ezzel kialakthatjuk azt az rlap kpet, amire egy-egy feladat megoldshoz szksgnk lesz. Az rlapok s a vezrlsek abban hasonltanak a munkafzetre, illetve a munkalapokra, hogy ezekhez is tartoznak elre elksztett modulok.

Vezrlsek
A vezrlsek az rlapon elhelyezett lthat objektumok.

199

Kapcsolat a felhasznlval
CommandButton
Parancsgomb vezrls. Leggyakrabban a kattintsra esemnyt hasznljuk.

4. rsz

Ezekben a modulokban is elre elksztett eljrsok vannak, amelyek klnbz esemnyek hatsra hajtdnak vgre. Az rlap moduljt gy jelenthetjk meg, hogy kettt kattintunk az rlap terletre. Ksbb ugyanezzel a mdszerrel jelenthetjk meg a vezrlsekhez tartoz osztly modulokat is. Az rlap programozsa esemnyekkel trtnik. Ez a modul is osztlymodul, mint a munkafzet vagy a munkalap. Ez azt is jelenti, hogy itt sem rdemes globlis vltozt deklarlni, mert a modul bezrja azt. Rajzoljunk egy CommandButton vezrlst az rlapra.

57. bra: Rajzoljunk vezrl objektumot az rlapra! 1. Kattintsunk r arra a vezrlsre, amit az rlapra szeretnnk tenni 2. Rajzoljuk az rlap megfelel helyre. 3. lltsuk be a vezrls tulajdonsgait
Tulajdonsgok beltasa
A vezrlsek tulajdonsgainak eg rsze nem vltozik a program futsa alatt. Ezeket llthatjuk be a Properties, tulajdonsg ablakban.

A harmadik lpst egy kicsit rszletezzk! Amint az rlapra rajzoltuk a megfelel vezrlst lltsuk be azokat a tulajdonsgait, amelyek a program futsa alatt nem fognak megvltozni. Ehhez azt kell tennnk, hogy jelljk ki, s a tulajdonsg ablakban a megfelel tulajdonsgokhoz rjuk be a megfelel rtkeket. A legfontosabb, hogy amint felrajzoltuk nevezzk el. Persze a tbbi tulajdonsg belltst is clszer ilyenkor elvgezni. Ha figyelmesen szemlljk az 58. brt, szre vehetjk, hogy a gomb nevt cmd eltaggal kezdtk. Hasonlan a vltozkhoz itt is rdemes olyan nevet adni, ami utal az objektum tpusra. Ezzel a ksbbi munknkat tesszk knnyebb. Hasonlan nevezzk el az rlapot is. Ennek az eltagja lehet frm az angol Form szra utalva. A mostani form neve pldul legyen frmProba. Miutn mindezzel vgeztnk, nzzk meg az rlaphoz tartoz modult, s ismerkedjnk meg az rlap esemnyeivel. Ugyanebben a modulban fogjuk tallni az rlapra helyezett vezrlsek esemnyeit is. lljunk az rlapra s ssk le az F5-s funkci billentyt. Az rlap mkdsbe lp, de a rajta elhelyezett gomb, mg nem tudja mit kell csinlnia. Ah-

200

16. fejezet

zenetek, prbeszd

58. bra: A Bezrs gomb bellsai hoz, hogy attl bezrdjon az rlap, hogy a bezrs gombra kattintottunk be kell rnunk egy egysoros parancsot a kattintsra esemnybe.

Esemnyek
A vezrlsek esemnyeit az ket befogad rlap moduljban talljuk

59. bra: A vezrl objektumok esemnyei


Private Sub cmdClose_Click() Unload Me End Sub

Br rvid kis utastsrl van sz, mgis elemezzk ki. Az Unload kitesskeli azt az objektumot az operav memribl, amelynek a nevt mg rtuk. Ez jelen esetben egy Me. De mi lehet ez? Ha egy rlap moduljba a Me objektumra hivatkozunk, akkor az arra az rlapra mutat, amelyikben ppen a programot rjuk. Teht a parancs azt az rlapot zrja be, amelyikben ezt a parancsot kiadtuk. Ha az rlapon elhelyezett vezrlsek egyikre szeretnnk hivatkozni, akkor kezdhetjk a hivatkozst a Me szcskval. Ha ezutn egy pontot tesznk a felknlt listban megtalljuk az rlapon elhelyezett sszes vezrl objektumot.

Me hivatkozs
Ezzel a nvvel hivatkozhatunk arra az rlapra, amelyiknek a moduljban programozunk.

201

Kapcsolat a felhasznlval

4. rsz

A kvetkez megoldand feladat az, hogy ne csak a Visual Basic Editorbl lehessen elindtani az rlapot. Ha visszakapcsolunk az Excelbe megprblhatjuk a Makr prbeszdpanelbl elindtani, de ott egy kis csalds fog rni minket. Nincs az rlap az indthat elemek listjban. Az indtshoz neknk kell megrnunk egy eljrst, amivel akr egy billenty-kombincival is mozgsba hozhatjuk az rlapot. Szrjunk be teht egy ltalnos modult a projektnkbe, s rjuk meg az rlap indt eljrst. Nem lesz bonyolult, de ezt meg kell rnunk. me:
Sub frmProbaStart() frmProba.Show End Sub

A prbeszdpanel indtsa
Ahhoz, hogy az elkszlt panelt elindthassuk egy kln eljrsra van szksg.

Most mr minden rendben! Elindthatjuk az rlapot, s ha szksges akr billentyt is rendelhetnk hozz. Most mr belefoghatunk az rlapok ksztsbe. Trjnk t egy gyakorlati feladat megoldshoz. Gyors belltsok w A fejezet elejn, az Office segddel, megoldottunk egy feladatot. Nhny gyors belltst hajtottunk vgre a felhasznl ignyeinek megfelelen. Oldjuk meg most ugyanezt rlap alkalmazsval. Hozzunk ltre egy egyszer prbeszdpanelt. Amiben ugyanazokat a belltsokat lehet elvgezni. Az rlapra helyezznk el ngy CheckBox vezrlst. Ezekkel fogjuk elvgezni a belltsokat. Rajzoljunk a panelre egy parancsgombot is. Ennek egyetlen feladata lesz, spedig az, hogy miutn elvgeztk a belltsokat, bezrjuk vele az rlapot. Rajzoljuk meg teht a kvetkez prbeszdpanelt:

60. bra: A gyors bellts panel kivitelezs kzben Rajzoljuk fel a ngy jellngyzetet az rlapra. Ha a jellngyzet gombra kettt kattintunk, akkor egyszerre tbb ilyen vezrlst is rajzolhatunk. Miutn megrajzoltuk a ngy jellngyzetet, rajzoljunk egy pa-

202

16. fejezet

zenetek, prbeszd

rancsgombot is. Ezt a parancsgombot arra fogjuk hasznlni, hogy a belltsok utn lezrjuk a prbeszdpanelt. lltsuk be azokat a tulajdonsgokat, amelyeket a program hasznlata sorn nem fogunk megvltoztatni. A belltsok, az 60. brn lthat szmozsnak megfelelen, a kvetkezk legyenek: 1. rlap Caption: Name: 2. CheckBox1 Caption: Name: 3. CheckBox2 Caption: Name: 4. CheckBox3 Caption: Name: 5. CheckBox4 Caption: Name:

Gyors belltsok frmGyorsBeallitas

Cellarcsok chkCellaRacsok

Munkalap flek chkLapFulek

llapotsor chkAllapotsor

Szerkesztlc chkSzerkLec

6. CommandButton1 Accelerator: B Cancel: True Caption: Bezrs Default: True Name: cmdBezaras Fontos, hogy mg az eltt nevezzk el a vezrlseinket, mieltt az esemnyeiket programozni kezdennk. Az esemnyvezrelt eljrsok nevei ugyanis tartalmazzk a vezrl objektum nevt. Egy ksbbi tnevezssel az esemnybe rt utastsok a korbbi nvvel elltott esemnyben maradnak. Ezzel csak plusz munkt adunk magunknak. A belltsok utn az rlapunk ilyen kpet fog mutatni: Mg mieltt elkezdennk megrni a programot, lljunk meg egy szra! A parancsgomb nhny tulajdonsga taln jdonsg lesz. Az Acceleretor tulajdonsgba egy B bett rtunk. Ennek az a feladata, hogy a feliratban alhzza a Bezrs els betjt. Ha a felhasznl a leti az ALT+B billentykombincit, pont az trtnik, mintha az egrrel kattintott volna a

Elnevezs
A vezrlseket a hasznlatuk eltt nevezzk el. Az vezrls nevt itt is rdemes eltaggal kezdeni.

203

Kapcsolat a felhasznlval

4. rsz

gombra. Hasonl clt szolgl a Default s a Cancel tulajdonsgok True belltsa is. Ha egy rlapon valamelyik parancsgomb Default tulajdonsgt True rtkre lltjuk, akkor az lesz a panel alaprtelmezett gombja. Egy rlap alaprtelmezett gombjt az ENTER billenty hozza mkdsbe. Ha a Cancel tulajdonsg rtke True, akkor azt az ESC billenty letse mkdteti. Ennek megfelelen a mi bezrs gombunk az ALT+B, az ENTER s az ESC billentyk letstl is mkdsbe lp. Ezutn kezdjk el a panel programozst. Kezdjk a cmdBezaras gombbal. Ebbe azt a parancssort kell bernunk, amivel bezrhatjuk az rlapunkat. A leggyorsabban gy juthatunk el a parancsgomb Click kattintsra esemnybe, a kettt kattintunk a gombra.

61. bra: A gyors bellts panel a tulajdonsgok belltsa utn


Private Sub cmdBezaras_Click() Unload Me End Sub

Esemnyek kivlasztsa
A prbeszdpanel bal oldali listjbl kivlszthatjuk azt a vezrlsr, ameliyknek az esemnyt programozni szeretnnk.

Ha egyszer mr itt vagyunk az rlap modulban, rjuk meg a tbbi eljrst is! Nyissuk le a modul bal oldali listapanelt. A lenyitott listbl vlasszuk ki a chkCellaRacsok elemet. Itt talljuk meg ennek a vezrlsnek az esemnyeit. Az alaprtelmezett esemny a Click. Mi nem ezt fogjuk programozni, hanem a Change esemnyt. Nyissuk le a modul jobb oldali listapanelt s keressk meg a kiszemelt esemnyt. Ha megtalltuk, rjuk bele a kvetkez sort.
ActiveWindow.DisplayGridlines = chkCellaRacsok

Ebben az utastsban a chkCellaRacsok vezrls pillanatnyi rtkt hasznltuk fel arra, hogy lthatv tegyk, vagy elrejtsk az aktv ablak cellarcsait. A CheckBox vezrlsek kt llapotak. Ha bekapcsoljuk az rtke True, kikapcsolva pedig False. A DisplayGridlines tulajdonsg belltshoz szintn logikai rtket kell rnunk. Teht az egyik objektum

204

16. fejezet

zenetek, prbeszd

tulajdonsgnak rtkt tadjuk egy objektum tulajdonsgnak. A tbbi belltst hasonlan fogjuk megvalstani. A chkLapFlek Change esemnyhez rjuk a kvetkez sort:
ActiveWindow.DisplayWorkbookTabs = chkLapFulek

Az llapotsor jellngyzet Change esemnyhez a megfelel utastssor a kvetkez:


Application.DisplayStatusBar = chkAllapotsor

A Szerkesztlc felirat gomb utastssora pedig ez legyen:


Application.DisplayFormulaBar = chkSzerkLec

Prbljuk ki a munknk eredmnyt. lljunk az rlapra s ssk le az F5-s funkci-billentyt. Amint rvltjuk az rlapon a CheckBox vezrlsek rtkt azonnal vgre is hajtdik a bellts. gy a httrben rgtn ltjuk is az eredmnyt. Jelenlegi rlapunknak azonban van mg egy hibja. Ez pedig az, hogy amikor megnyitjuk az rlapot, akkor a jellngyzetek nem azt az llapotot mutatjk, amit a krnyezet szerint mutatniuk kellene. Ezeket a belltsokat az rlap megnyitsa sorn kell belltanunk. Az rlap megnyitsakor bekvetkez esemny az Initialize aktivldik. Vagyis azok az utastsok, amelyeket ebbe az esemnyvezrelt eljrsba runk, akkor fognak lefutni, amikor az rlapot megnyitjuk, hasznlatba vesszk. Kattintsunk ht kettt az rlapra. Keressk meg a Initialize esemnyt, s rjuk be az eljrsba a kvetkez sorokat:
chkCellaRacsok = ActiveWindow.DisplayGridlines chkLapFulek = ActiveWindow.DisplayWorkbookTabs chkAllapotsor = Application.DisplayStatusBar chkSzerkLec = Application.DisplayFormulaBar

Htra van mg az indt eljrs elksztse. A prba rlap indtshoz mr beillesztettnk egy ltalnos modult a projektnkbe. Ez ppen j lesz az jonnan ltrehozott rlap indteljrshoz.

Tovbbi vezrlsek
Az rlapokon sokfle vezrlst hasznlhatunk. Ezeknek a megismersben nem segt a makr rgzts. Itt neknk kell ksrleteznnk, utna olvasnunk. Ezeket programozni is lehet. Ha kevsnek tlnnk a rendelke-

205

Kapcsolat a felhasznlval

4. rsz

zsnkre ll vezrlseket, a kereskedelemben jabbakat vehetnk. Ebben a rszben ismerkedjnk meg nhny vezrls hasznlatval.

Beviteli mez
Ebben a pldban kzvetlenl adunk t adatot egy rlapon elhelyezett TextBox vezrlsbl a munkafzet egyik celljba. Nyissunk meg egy j munkafzetet. Kapcsoljunk t a VBE ablakba. Az j munkafzetbe szrjunk be egy felhasznli prbeszdpanelt. A panelre helyezznk el egy TextBox vezrlst. Jelljk ki, s a tulajdonsgablakban keressk meg a ControlSource tulajdonsgt. Ennek a tulajdonsgnak legyen az rtke A1. Ezzel meghatroztuk, hogy a mindenkori aktv munkalap A1-es celljba kerljn az a szveg, amit az rlap beviteli mezjbe rtunk. Ezutn ssk le az F5-s funkci-billentyt. A panel indtsnak az eredmnyeknt a VBE-bl tkerlnk az Excelbe. Vagyis a ltrehozott prbeszdpanel az Excel terlete fltt fog megjelenni. rjunk be egy tetszleges szveget a beviteli dobozba, majd zrjuk le az rlapot. Erre hasznljuk az rlap jobb fels sarkban tallhat X-et. Miutn lezrtuk a panelt a VBE-bl lapozzunk vissza az Excelbe. Azt fogjuk tapasztalni, hogy az aktv munkalap A1-es celljba kerlt az a szveg, amit a beviteli dobozba rtunk. Teht, ha a ControlSource tulajdonsgban egy cellra hivatkozunk, akkor az rlap lezrsa utn tadhatjuk az adatbeviteli doboz tartalmt. Ezt termszetesen brmelyik msik adatbeviteli vezrls esetn is megtehetjk. Ahhoz, hogy ltrehozzunk egy olyan rlapot, amelynek a segtsgvel adott cellk tartalmt tlthetjk fel nem is kell programoznunk. Ha a munkafzet egy meghatrozott munkalapjnak az A1-es celljba szeretnnk irnytani az adatainkat, akkor meg kell hatrozni azt is, hogy melyik a kivlasztott munkalap. Ha ez pldul a Munka1-es lap, akkor a ContlolSource tulajdonsgnak a Munka1!A1 rtket kell adni. Programozva w Ugyanezt a feladatot oldjuk meg programozssal is. Ebben a megoldsban, azonban nem a ControlSource tulajdonsgot fogjuk felhasznlni, hanem a beviteli doboznak azt az esemnyt, ami a beviteli doboz tartalmnak a megvltozsakor kvetkezik be. Trljk a ControlSource tulajdonsg rtkt. Kattintsunk kettt a beviteli dobozra. Erre azrt van szksg, hogy megjelenjen a beviteli dobozhoz tartoz modul. Ennek a vezrlsnek az alaprtelmezett esemnye az adatvltozs. A TextBox1_Change eljrsban llunk. Ebbe rjuk be a kvetkez utastssort:
Worksheets(Munka1").Range(A1") = TextBox1

TextBox
Magyar nevn bevitali mez. Ezt a vezrlst arra hasznljuk, hogy a felhasznl ltal bert rtket tadjuk a programnak.

206

16. fejezet

zenetek, prbeszd

Ismt indtsuk el az rlapot. Figyeljk meg, hogy ebben a megoldsban a Munka1-es munkalap A1-es celljban azonnal megjelenik a bert adat, amint letnk egy bett. Ebben az esetben a beviteli doboz adatt az rlapban dolgoztuk fel. Ez most csak annyibl llt, hogy a bert adatot tmsoltuk a kivlasztott cellba. Hasonlan hasznlhatjuk a jellngyzetet, vagy a lptet gombot is. A vezrlseket teht hasznlhatjuk a kezdeti tulajdonsgok belltsval, ilyenkor a munkalapon dolgozzuk fel a bevitt adatokat, vagy hasznlhatjuk a vezrls programozsval, ebben az esetben valamelyik esemnyt hasznljuk fel arra, hogy megrjuk azokat az utastsokat, amelyekkel feldolgozzuk a bert adatokat. Az adattads msik mdja, amikor adattads kzben kdoljuk az adatokat. Ehhez a vlasztcsoport, a Kombinlt lista, a lista s a vlasztcsoport vezrlseket hasznljuk. A vlasztcsoport, kt vezrls egyttes hasznlatbl llthat ssze. Ezek a Keret s a Vlasztgomb.

Kombinlt lista
Ha bizonyos rtkek kzl kell vlasztanunk egy adat kitltsekor, akkor kombinlt listt hasznlunk. A lehetsges adatokat a kombinlt lista lenyitsval jelenthetjk meg. A listban felsorolt adatokat gy hasznlhatjuk fel, hogy lenyitjuk a listt s rkattintunk a megfelel sorra. A kivlasztott listaelemet a program segtsgvel feldolgozhatjuk, vagy a megfelel cellba juttathatjuk. Ahhoz, hogy kombinlt listt tudjunk hasznlni, meg kell adnunk azt, hogy milyen adatok jelenjenek meg a lista lenyitsakor. Ehhez a kombinlt lista RowSource tulajdonsgnak kell rtket adnunk. A msik lnyeges tulajdonsg a ControlSource. Ebbl olvashatjuk ki azt, hogy a lista melyik elemt vlasztotta ki a felhasznl. Ezeket a tulajdonsgokat ktfle mdon hatrozhatjuk meg. Az egyik esetben egy munkalap megfelel tartomnyra hivatkozunk, a msik esetben programozssal hatrozzuk meg a RowSource s a ControlSource tulajdonsgok rtkeit. A sorforrs tartomnybl w A kvetkez pldt gy oldjuk meg, hogy tartomnyokat hasznlunk a tulajdonsgok belltsra. Ksztsnk egy rlapot, amelyikre rajzoljunk egy kombinlt listt. A lista lenyitsa utn vrosok kzl lehessen vlasztani s a kivlasztott vros nevt rjuk az els munkalap A1-es celljba. Nyissunk meg egy j munkafzetet s ksztsk el a listt a Munka2 (Sheet2) munkalapon. A lista elksztse utn kapcsoljunk t a VBE programba. A Insert UserForm utastssal szrjunk be egy rlapot az aktulis projektbe. Az j rlapra rajzoljunk egy kombinltlista vezrlst. Kattintsunk r az egr jobb gombjval s vlasszuk ki a Properties utastst. A

ComboBox
Lenyithat listapanel. A lenyitott lista tartalmt mi hatrozzuk meg. A felhasznl vlasztst feldolgozhatjuk a programban.

RowSource
A kombinlt lista RowSource sorforrs tulajdonsgban hatrozzuk meg azt, hoy mi jelenjen meg a lenyitott listban.

207

Kapcsolat a felhasznlval

4. rsz

keressk meg a RowSource tulajdonsgot s rjuk be a sorforrs helyt, a Munka2!A2:A7 hivatkozst. Ezutn keressk meg a ControlSource tulajdonsgot. Ide rjuk be a Munka1:A1 cellahivatkozst. Ezutn jelljk ki az rlapot, s az F5-s funkci-billenty letsvel indtsuk el. A megjelen prbeszdpanelben nyissuk le a kombinlt listt s vlasszunk egy vrost. Ezutn zrjuk le az rlapot s nzzk meg a Munka1 munkalap A1-es celljt. Itt megtalljuk a kivlasztott vros nevt. Ez volt a legegyszerbb mdja annak, hogy kombinlt listt hasznljunk.

62. bra: Ksztsk el a kombinlt lista sorforrst Ms esetben a sorforrs tbb oszlopot is tartalmazhat. Ilyet hasznlunk pldul akkor, amikor azt szeretnnk megoldani, hogy amikor a listbl kivlasztjuk egy termk nevt, a vlaszts eredmnyeknt a termk ra jelenjen meg egy cellban. Ennek a pldnak a megoldst azzal kezdjk, hogy ugyanebben a munkafzetben a Munka2 munkalapon a C1-es celltl kezdve ltrehozzuk a termkek listjt. Az els oszlop legyen a termkek neve ru , a msodik a termkek ra r. Ezutn rajzoljunk egy jabb kombinlt listt az rlapra. A RowSource tulajdonsghoz rjuk be a Munka2!C2:D6-os hivatkozst. A ControlSource tulajdonsghoz rjuk be: Munka1!A3.

63. bra: Tbb oszlopos sorforrs elksztse A vezrlsnek meg kell mondanunk, hogy most kt oszlopbl kell megjelentenie az adatokat, ezrt a ColumnCount (oszlop-szm) tulajdonsghoz rjunk be egy kettes szmot. Ide mindig azt kell bernunk, hogy hny

208

16. fejezet

zenetek, prbeszd

oszlopa van a kombinlt lista sorforrsnak. A kvetkez lpsben hatrozzuk meg azt is, hogy a kt oszlop kzl melyiket szeretnnk felhasznlni. Ezt a BoundColumn (kttt oszlop) tulajdonsgban llthatjuk be. Teht rjuk be annak az oszlopnak a szmt, amit a ControlSource tulajdonsgban meghatrozott cellba szeretnnk rni. Ez az rakat tartalmaz msodik oszlop. Ha szksges, mg azt is megadhatjuk, hogy a lista lenyitsa utn milyen szlesek legyenek a sorforrs egyes oszlopai. A ColumnWidths (oszlopszlessgek) tulajdonsgban soroljuk fel az oszlopok szlessgt. Az egyes szlessgeket egymstl pontosvesszvel vlasszuk el. Ide gpeljk be az 1 cm; 0 cm szlessgeket. Amint kilpnk a tulajdonsgbl az Excel trja a mrtkegysgeket pontra. A msodik oszlopnak azrt adtunk nulla rtket, hogy a listban ne jelenjen meg az r, csak a megnevezs. A tulajdonsgok meghatrozsa utn jelljk ki az rlapot s indtsuk el. Ezt megtehetjk a szoksos mdon az Indts [Run] Eljrs/UserForm futtatsa utastssal, de gy is kiprblhatjuk az rlapot, ha a kijellse utn letjk az F5-s funkci billentyt. A termk kivlasztsa utn zrjuk le az rlapot s nzzk meg az els munkalapon az eredmnyt. Itt most a termk rt olvashatjuk.

64. bra: Az elkszlt kombinlt lista hasznlata Programbl w A sorforrs megadsnak msik mdszere, amikor a lista elemeit tmbben deklarljuk s programbl a meghatrozott tmbt hasznljuk a lista sorforrsaknt. A sorforrs rtkeinek belltst akkor rdemes vgrehajtani, amikor az rlapot betltjk, hasznlatba vesszk. Ezrt a sorforrs tulajdonsgot az rlap Initialize esemnyvezrelt eljrsban fogjuk megrni. Az ide rt utastsokat akkor hajtja vgre a program, amikor az rlapot megnyitjuk. Ismt oldjuk meg az elz kt feladatot, de most a sorforrst programbl hatrozzuk meg. Szrjunk be a projektbe egy jabb rlapot. Erre helyezznk el egy kombinlt lista vezrlst. Egy paprra rjuk fel a kombinlt lista nevt, amit a tulajdonsgablakban nzhetnk meg. Kattintsunk kettt az rlap terletre. A megjelen objektum modul megjelense utn vlasszuk

209

Kapcsolat a felhasznlval

4. rsz

ki az Initialize esemny eljrst. Hatrozzunk meg egy tmbt, majd lltsuk be a lenyitott lista tartalmt. Az eljrs a kvetkez lesz:
Private Sub UserForm_Initialize() Dim strVarosok(5) As String strVarosok(0) = "rd" strVarosok(1) = "Szeged" strVarosok(2) = "Pcs" strVarosok(3) = "Szolnok" strVarosok(4) = "Budapest" strVarosok(5) = "Vc" ComboBox1.List = strVarosok End Sub

Figyeljk meg, hogy ebben az eseten nem a RowSource, hanem a List tulajdonsgot lltottuk be. A msik rdekessg az, hogy a Vrosok tmbt hasznltuk fel a listasorok meghatrozsra, de nem rtunk mg zrjelet, vagy indexet. Ez ebben az esetben gy helyes. Teht ha programbl hatrozzuk meg a sorforrst, akkor a tmb nevt index s zrjel nlkl hasznljuk. Ha programbl szeretnnk hasznlni a lista eredmnyt, akkor ismt a lista tulajdonsgot fogjuk ignybe venni. A kombinlt lista List tulajdonsgt ugyangy hasznlhatjuk, mintha egy tmb lenne, vagyis a ComboBox1.List(0) hivatkozssal a listapanel listjnak az els elemre mutatunk r. Ez a mi pldnk szerint az rd rtket tartalmazza. Csakhogy a jelenlegi feladatban annak a listaelemnek a tartalmt szeretnnk megjelenteni, amelyiket kivlasztottuk a listbl. Ezt a ComboBox1.ListIndex tulajdonsgbl olvashatjuk ki. Ezt fogjuk felhasznlni arra, hogy a kivlasztott lista rtkt berjuk az els munkalap C1-es celljba. Az utastst a ComboBox1_Change esemnyvezrelt eljrsba rjuk meg.
Private Sub ComboBox1_Change() Worksheets("Munka1").Cells(1) = _ ComboBox1.List(ComboBox1.ListIndex) End Sub

Prbljuk ki az rlap mkdst. Figyeljk meg azt is, hogy miutn kivlasztottuk a listapanel egyik elemt, az eredmny azonnal megjelenik a Munka1 lap C1-es celljban. Oldjuk meg a msik feladatot is programozssal, vagyis a lenyitott listban jelentsk meg a termkek nevt. A termk kivlasztsa utn a Munka1 munkalapon a C3-as cellban jelentsk meg a kivlasztott ru rtkt. Ehhez az rlap Initialize eljrst bvtsk ki a kvetkez utastsokkal.

210

16. fejezet

zenetek, prbeszd

Private Sub UserForm_Initialize() Dim strVarosok(5) As String Dim strAruk(4, 1) As String strVarosok(0) = "rd" strVarosok(1) = "Szeged" strVarosok(2) = "Pcs" strVarosok(3) = "Szolnok" strVarosok(4) = "Budapest" strVarosok(5) = "Vc" strAruk(0, 0) = "Rdi" strAruk(0, 1) = "28000" strAruk(1, 0) = "Televzi" strAruk(1, 1) = "65000" strAruk(2, 0) = "Magnetofon" strAruk(2, 1) = "29300" strAruk(3, 0) = "CD lejtsz" strAruk(3, 1) = "34000" strAruk(4, 0) = "Vide" strAruk(4, 1) = "70000" ComboBox1.List = strVarosok ComboBox2.List = strAruk ComboBox2.ColumnCount = 2 ComboBox2.ColumnWidths = "1 cm ; 0 cm" End Sub

Az eljrs elejn deklarltunk egy kt dimenzis tmbt. Ezt ksbb feltltttk adatokkal. A listapanel sorforrst ismt gy hatroztuk meg, hogy rtket adtunk a listapanel List tulajdonsgnak. A kvetkez sorban a ColumnCount tulajdonsg rtkt kettre lltottuk be, ezzel jelezve, hogy a lista kt oszlopos lesz. A ColumnWidths tulajdonsgot gy lltottuk be, hogy a lista msodik oszlopa ne jelenjen meg. A kvetkez feladat az, hogy az eredmnyt felhasznljuk. Ismt a Change esemnyt fogjuk programozni. Kattintsunk teht kettt a kombinlt listra, Majd a megjelen vezrls modul Change esemnybe rjuk be a kvetkez kt utastssort.
Worksheets(Munka1").Range(C1") = _ ComboBox2.List(ComboBox2.ListIndex, 0) Worksheets(Munka1").Range(D1") = _ ComboBox2.List(ComboBox2.ListIndex, 1)

211

Kapcsolat a felhasznlval

4. rsz

Az els utastssor segtsgvel a Munka1-es munkalap C3-as celljba bertuk az ru megnevezst. A msodik utastssort pedig arra hasznltuk, hogy az ru rt megjelentsk a D3-as cellban. Programozssal teht sokkal rugalmasabban hasznlhatjuk a kombinlt listt. A ktfle meghatrozsi mdot kombinlhatjuk is. Ha pldul a sorforrst a munkalap tartomnybl hatrozzuk meg, akkor az eredmnyt az elbb lert mdszerrel feldolgozhatjuk vagy a sorforrst megadhatjuk programbl s az eredmnyt egy cellba rhatjuk a ControlSource tulajdonsg meghatrozsval.

Listapanel vezrls
Ez a vezrls programozs szempontjbl hasonl, mint a kombinlt lista. Ennek is a RowSource s a ControlSource tulajdonsgait hasznljuk fel a programozs sorn. A lista vezrls nmelyik tulajdonsgnak belltsval jelents mrtkben megvltoztathatjuk ennek a vezrlsnek a szolgltatsait. Ebben a rszben azzal ismerkednk meg, hogy mik ezek a belltsok s hogyan hasznlhatjuk fel ennek a vezrlsnek az eredmnyeit. Tbb listaelem kivlasztsa w Kezdjnk egy j munkafzetet, az elzt zrjuk le. Kapcsoljunk t VBE nzetbe. A jelenlegi projektbe szrjunk be egy j rlapot. Erre az rlapra rajzoljunk egy lista vezrlst. Ennek a lista vezrlelemnek a sorforrst programbl fogjuk meghatrozni. A sorforrs elemeinek feltltsre az rlap Initialize eljrst hasznljuk. Kattintsunk kettt az rlap htterre. Meg fog jelenni az rlap objektumhoz tartoz modul. A modul Eljrs listjbl vlasszuk ki az Initialize eljrst. Az eljrsba rjuk be a kvetkez utastsokat:
Private Sub UserForm_Initialize() Dim strForras(6) As String strForras(0) = "htfo" strForras(1) = "kedd" strForras(2) = "szerda" strForras(3) = "cstrtk" strForras(4) = "pntek" strForras(5) = "szombat" strForras(6) = "vasrnap" ListBox1.List = strForras End Sub

ListBox
Ez a lista mindg nyitva van. Nincs adatbevitelre alkalmas rsze. Ebbl csak kivlaszthatunk egy elemet.

Ezutn a projekt ablakban (a VBE bal oldaln) kattintsunk kettt az UserForm1 felirat sorra. Ismt megjelenik a ltrehozott rlap. Jelljk

212

16. fejezet

zenetek, prbeszd

ki az rlapra rajzolt listavezrlst s lltsuk be gy a tulajdonsgait, hogy minden listaelem eltt megjelenjen egy jellngyzet. Ennek rdekben LineStyle tulajdonsg mellett tallhat listt nyissuk le s vlasszuk ki a fmListStyleOption lehetsget. Ha bekapcsoljuk mg azt is, hogy egyszerre tbb elemet lehessen kivlasztani, akkor a listapanel elemei eltt vlasztgombok jelennek meg. Ezt a listapanel MultiSelect tulajdonsgnak frmMultiSelectMulti rt5kre lltsval rhetjk el. Alaprtelmezsben a vlasztgombok egyszerre csak egy listaelem kivlasztst teszik lehetv. lltsuk be azt is, hogy egyszerre tbb listaelemet is ki lehessen jellni a listbl. Ennek rdekben lltsuk be az objektum MultiSelect tulajdonsgt a kvetkez rtkre: fmMultiSelect-Multi. Ezutn jelljk ki az rlapot s hajtsuk vgre az Indts [Run] Eljrs/UserForm futtats utastst. A listban jelljnk meg tbb listaelemet.

65. bra: Tbb elem kivlasztsa a listapanelbl Ezutn ismerjk meg azt is, hogy milyen mdon lehet felhasznlni az eredmnyt, vagyis, hogy hogyan adhatjuk t a program tovbbi rszeinek, hogy mely elemeket vlasztotta a felhasznl. A kirtkelsre felhasznlhatjuk az rlap Terminate vagy a lista Change esemnyt. Az rlap Terminate esemnye akkor kvetkezik be amikor bezrjuk az rlapot, a lista Change esemnye pedig akkor, amikor megvltoztatjuk a listaelemek kijellst. Vlasszuk az rlap lezrsa esemnyt Terminate s rjunk egy olyan programot, amelyik az aktv munkalapra kirja a listbl kivlaszthat rtkeket, s ezek mell megjelenti azt is, hogy melyik elemet vlasztotta a felhasznl. Kattintsunk kettt az rlap terletre s rjuk meg a kvetkez eljrst.
Private Sub UserForm_Terminate() Dim bytI As Byte For bytI = 1 To ListBox1.ListCount With Worksheets(Munka1")

213

Kapcsolat a felhasznlval
.Cells(bytI, 6) = ListBox1.List(bytI - 1) .Cells(bytI, 7) = ListBox1.Selected(bytI - 1) End With Next bytI End Sub

4. rsz

Az eljrs els sorban deklarltunk egy vltozt. Ezt arra fogjuk felhasznlni, hogy vgiglpkedjnk a lista elemein. Teht ennek a vltoznak az rtke fog rmutatni az ppen aktulis listaelemre.
For bytI = 1 To ListBox1.ListCount

Ennek a sornak az a feladata, hogy addig ismtelje a lista elemek kirtkelst, amg a listaelemek szma tart. Ezt jelzi a sor vgn tallhat ListBox1.ListCount kifejezs. A ListCount tulajdonsg ugyanis azt mutatja meg, hogy hny soros a lista.
Cells(bytI, 1) = ListBox1.List(bytI - 1)

Ebben a sorban ratjuk ki a listk elemeit. Ezek az rtkek az aktulis munkalap els oszlopban fognak megjelenni.
Cells(bytI, 2) = ListBox1.Selected(bytI - 1)

A ListBox1.Selected tulajdonsgbl megtudhatjuk, hogy ppen egy listaelemet bekapcsolt-e a felhasznl. Itt minden listaelemre rkrdeznk. A bekapcsolt elemek True rtket adnak vissza. Futtassuk az rlapot. Tetszlegesen jelljk ki a listaelemeket, majd zrjuk le az rlapot. A vlasztsunk eredmnyt az aktv munkalapon fogjuk meg tallni. Ha csak arra lennnk kvncsiak, hogy a felhasznl melyik elemeket vlasztotta ki a listbl, akkor az rlap Initialize eljrsba rjunk be egy olyan utastssort, amelyik trli a munkalapnak azt a terlett, ahova az eredmnyeket rtuk. A Terminate eljrst rjuk t a kvetkezkppen:
Private Sub UserForm_Terminate() Dim bytI As Byte Dim bytK As Byte bytK = 1 For bytI = 1 To ListBox1.ListCount If ListBox1.Selected(bytI - 1) Then Cells(bytK, 9) = ListBox1.List(bytI - 1) bytK = bytK + 1 End If

214

16. fejezet
Next bytI End Sub

zenetek, prbeszd

Ha a MultiSelect tulajdonsgot fmMultiSelectExtended rtkre lltjuk be, akkor a listapanel ugyangy fog mkdni, mint minden Windows alkalmazs. Vagyis, ha kijellnk egy listaelemet s lenyomjuk a CTRL billentyt, akkor tovbbi listaelemeket vlaszthatunk ki, ha pedig egy listaelem kijellse utn a SHIFT billenty lenyomsval kattintunk egy msik sorra, akkor a kezdetben kijellt listasortl addig jelljk ki a listasorokat, ameddig az jonnan kijellt elem tart. Lista, mint vlasztcsoport w A listt bellthatjuk gy is, hogy egyszerre csak egy elemt lehessen kivlasztani s minden listasor eltt egy vlasztgomb legyen. A belltshoz lltsuk be a lista LinsStyle tulajdonsgt frmListStyleOption rtkre s ne lltsunk be tbbszrs kivlasztst. Ugyanebbe a projektbe ksztsnk mg egy rlapot s ismt rajzoljunk egy lista vezrlst. Most is az rlap Initialize utastst hasznljuk fel arra, hogy meghatrozzuk a lista vezrls elemeit. Ez legyen ugyanaz, mint az elz feladat esetn. Indtsuk el ezt az rlapot. Prbljuk meg kivlasztani a lista egyik vagy msik elemt. Azt fogjuk tapasztalni, hogy egyszerre csak egy eleme lehet kivlasztva. Zrjuk le az rlapot s nzzk meg a kirtkels mdjt. A kirtkelsre tbb lehetsg is knlkozik. A legegyszerbb ezt akkor hasznljuk, ha a munkalapon dolgozzuk fel a vlaszts eredmnyt az, amikor a lista ControlSource tulajdonsgba berjuk azt a cellahivatkozst, ahova az eredmnyt szeretnnk elhelyezni. A programban hasznlhat mdszert rjuk meg az rlap lezrsa (Terminate) eljrsba. Kattintsunk kettt az rlap terletn. A megjelen modul ablak Eljrs listjbl vlasszuk ki a Terminate esemnyt. Ebbe rjuk bele a kvetkez utastsokat:
Private Sub UserForm_Terminate() Range(A5") = ListBox1.ListIndex Range(A6") = ListBox1.List(ListBox1.ListIndex) End Sub

A lista ebben az llapotban a ListIndex tulajdonsgban trolja a kivlasztott listasor sorszmt. A sorszmozs nulltl kezddik. Ezt az rtket jelentjk meg az A5-s cellban az els utastssorral. A msodik utasts segtsgvel a listapanel kivlasztott sornak szvegt rjuk az aktv munkalap A6-os celljba.

215

Kapcsolat a felhasznlval

4. rsz

sszefoglals
A felhasznlval sokfle grafikus eszkzzel tarthatjuk a kapcsolatot. Egyszerbb zeneteket gyorsan kevs programozssal kldhetnk az MsgBox segtsgvel, amelynek kt vltozata is a rendelkezsnkre ll. Az egyik vltozat, amikor metdusknt hivjuk meg, a msik esetben fggvnyknt. Metdusknt meghvva, nem rtkelhetjk ki a felhasznl vlaszt. gy nincs is rtelme vlasztsi lehetsget elheyezni rajta. A metdusknt hvott MsgBox esetn az argumentumokat zrjeklek nlkl soroljuk fel. Ebben az esetben a zrojelek nem csak feleslegesek, de futsi hibt is eredmnyeznek. A fggvnyknt meghvott zenet panel argumentumait zrjelek kz kell rnunk, s mindenkppen egy vltozban kell trolni a felhasznl vlaszt. Hasonlan egyszer eszkz az Office segd, amelyet minden Office alkalmazsbl elrhetnk. Az egyszersg htrnya, hogy csak korltozott szm vezrtls helyezhetnk el rajta s csak programozottan kezelhet. Egyedi rlapokat hozhatunk ltre az alkalmazs rugalmass ttele rdekben. Ebben az esetben j eredmnyeket rhetnk el a vezrl objektumok tulajdonsgainka a belltsval. A programozsa sem tl sszetett ezeknek az eszkzknek, de a megismers nmi kisrlettezst ignyel. Itt nem aklalmazhatjuk a makr rgztst az objektumok megismersre. Ezrt kisebb programook rsval prbljuk megismerni az eszkzket.

216

17. fejezet

Mensor, eszkztr

iutn elksztettk az eljrsainkat, azt vrhatlag tbben is fogjk hasznlni. Mi el tudjuk indtani a felvett vagy ltalunk rt eljrsokat a Makrk (Macros) panelbl vagy a Visual Basic Editorbl. Ez a mdszer azonban lehet, hogy egy tlagos felhasznlnak nem lesz annyira egyszer. gy kell kialaktanunk a program krnyezetet, hogy az, brki szmra knnyen kezelhet legyen. Pldul, helyezznk el gombot egy eszkztron, amivel elindthat az eljrs. Azt is megtehetjk, hogy teljesen j egyedi eszkztrat ksztnk a programjaink mkdtetshez. Tovbbi lehetsg, hogy menparancshoz rendeljk a makrnkat. A vgcl az, hogy amennyire lehet, olvasszuk bele az Excelbe azokat a programokat, amelyeket mi ksztettnk. Ehhez j eszkz, ha azt a munkafzetet, amelyikben a programunk van bepl makrknt mentjk el s hozzkapcsoljuk az Excelhez. A gondolatbreszt krdsek a kvetkezk: w Hogy rendelhetjk az eljrst eszkztrhoz vagy menhz? w Mit kell tennnk egy bepl makr elksztse sorn? w Hogy hatrozhatjuk meg, hogy egy fggvny melyik kategriba kerljn?

Egyedi men s eszkztr


A men s az eszkztr ugyanarra az objektum osztlyra pl. Ezrt mindkettt ugyan ott, s ugyangy alakthatjuk t. A kiinduls mindkt esetben az, hogy az egr jobb gombjval kattintsunk vagy az egyik eszkztrra, vagy a mensorra. A helyi menben az utols parancs a Testreszabs (Customize). Miutn megjelent a prbeszdpanel, hozzfoghatunk az eszkztrak, s a men egyedi kialaktshoz. Mind a kt objektumra ugyanazokat a parancsgombokat helyezhetjk el. A parancsgombokat ugyangy rendelhetjk hozz az ltalunk rt eljrsokhoz.
Men s eszkztr
A Testreszabs panel bekapcsolsa utn mind kt objektumot egyedileg talakthatjuk.

217

Kapcsolat a felhasznlval

4. rsz

66. bra: A men s az eszkztrak talaksa


Testreszabs panel
Amg ez a panel ltszik, mind a ment, mind az eszkztrat szerkeszthetjk.

j ezskztr
A testreszabs panelben ltrehozhatunk j eszkztrat.

Amg az alkalmazsban lthat a Testreszabs (Customize) prbeszdpanel, addig mind az eszkztrakat, mind a menket szabadon talakthatjuk. Megfoghatjuk a panel Parancsok (Commans) lapon tallhat brmelyik gombot s egy tetszleges eszkztr gombjai, vagy a men parancsok kz hzhatjuk. A megjelen prbeszdpanel hrom lapbl ll. Az els lap neve Eszkztrak (Toolbars). Itt talljuk meg az adott Office alkalmazsban jelenleg ez az Excel ltrehozott eszkztrakat s mensorokat. Ezen a lapon llva hozhatunk ltre jabb eszkztrat vagy mensort. A Parancsok (Commands) lapon az Excel-ben hasznlhat parancsgombokat, utastsokat fedezhetjk fel. Az itt tallhat gombokat mind az eszkztrra, mind pedig a menre elhelyezhetjk. Egyszeren meg kell fogni az egrrel s a megfelel helyre hzni. A harmadik fl a Belltsok (Options) nevet viseli. Itt a mensor mkdst llthatjuk be. A Parancsok kztt tallhat gombokhoz a program ri mr hozzrendeltek bizonyos funkcikat Ha nincs szksgnk az adott funkcira, ezeket a gombokat is felhasznlhatjuk a magunk cljaira. Van azonban kt olyan gomb, amit kifejezetten arra a clra tartottak fenn, hogy makrkat rendelhessnk hozzjuk. Ezeket, a Makrk (Macros) utastscsoportban talljuk. Ha kivlasztjuk a csoportot, akkor megtalljuk a Felhasznli mengomb (Custom Menu Item) Egyedi gomb (Custom Button). Ezekhez mi rendelhetjk hozz az eljrsaikat. Elszr hozzunk ltre egy jabb eszkztrat, amin majd az a gomb lesz, amivel az elbb rgztett makrt fogjuk elindtani. Lapozzunk a prbeszdpanel Eszkztrak (Toolbars) lapjra s kattintsunk a Ltrehozs (New) gombra. Erre megjelenik egy kisebb panel, amelyikben elnevezhetjk a most kszl eszkztrat. Ennek a szerkesztdobozba rjuk be a Segdlet elnevezst, majd kattintsunk az OK gombra.

218

17. fejezet

Mensor, eszkztr

67. bra: j eszkztr ltrehozsa Az elkszlt eszkztr mg res, hiszen nem helyeztnk mg el rajta egyetlen gombot sem. Ha az eszkztr a ksbbiekben feleslegess vlik, trlhetjk az Eszkztrak listjbl, ha kijelljk s rkattintunk a Trls (Delete) felirat gombra. Most ezt ne tegyk, csak jegyezzk meg. Azt is figyeljk meg, hogy ha egy olyan eszkztrat jellnk ki a listbl, amelyik az Excel rsze volt vagyis nem mi ksztettk , akkor a Trls gombot nem vlaszthatjuk ki. Ezeket az eszkztrakat ugyanis, nem lehet trlni, csak alaphelyzetbe lltani. Ez azt jelenti, hogy nyugodtan megvltoztathatjuk brmelyik eszkztr sszettelt, ha meggondoljuk magunkat, brmikor visszallthatjuk az eredeti llapotot.

68. bra: j parancsgomb elhelyezsa az eszkztron

219

Kapcsolat a felhasznlval
j gomb
A Testreaszabs panel Parancsok lapjrl tetszleges gombot hzhatunk az eszkztrra.

4. rsz

Ksztsnk gombot, amivel elindthatunk egy eljrst. Nyissuk meg a CD mellklet Menusor eszkoztar mappjbl a Menusor_eszkoztar.xls munkafzetet, vagy brmelyik msikat, amelyben vannak makrk. A Kategrik (Categories) listbl keressk ki a Makrk (Macros) csoportot. Fogjuk meg az Egyedi gomb (Custom Button). Gombot s hzzuk az j Segdlet eszkztrra (219. oldal 68. bra). Ehhez fogjuk hozzrendelni az egyik makrt tartalmaz megnyitott munkafzet eljrst. A Testreszabs (Custoize) prbeszdpanel tovbbra is legyen nyitva. lltsuk be az Egyedi eszkztr gomb jellemzit. Az egr jobb gombjval kattintsunk az Egyedi gombra. Ez az a helyi men, ahol az eszkztrak gombjainak s a menparancsoknak a jellemzit bellthatjuk. Itt tallunk egy szerkesztdobozt, mely a gomb nevt tartalmazza, ami jelenleg az Egyedi gomb (Custom Button). Ezt a szveget rjuk t Jelents-re. Erre azrt van szksg, mert ez a szveg fog megjelenni akkor, amikor az egrmutatt a gomb fl hzzuk. A lenyitott helyi menben a gombkpen is vltoztathatunk. Ismt kattintsunk az egr jobb gombjval az eszkztr gombjra, s vlasszuk ki a Gombkp vltsa (Change Button Image) utastst. Itt elksztett rajzok vrjk, hogy felkerljenek egy gomb felletre. Tetszs szerint vlasszunk egyet. Ha mg ezek kztt sincs olyan, amilyet mi szeretnnk, akkor kattintsunk a helyi-men Gombkp szerkesztse (Edit Button Image) utastsra. Most mr csak a sajt fantzink s kzgyessgnk lehet az akadlya egy tetszets gombfellet megrajzolsnak. Rendeljk hozz a makrt a gombhoz. A helyi-men legals utastsa a Makrhozzrendels (Assign Macro), ha erre kattintunk, akkor a megjelen prbeszdpanelbl kivlaszthatjuk annak a makrnak a nevt, amit akkor szeretnnk lefuttatni, amikor erre a gombra kattintunk. Az OK gombra kattintva lpjnk ki a Hozzrendels gombhoz panelbl, majd a Testreszabs (Customize) panelt zrjuk le, a Bezrs (Close) felirat gombbal. lljunk egy res lapra s kattintsunk r az j gombra.

j menpont
A Testreszabs panel Parancsok lapjn talljuk az res menpontot.

69. bra: A menszerkezet Menutasts ltrehozsa w A mveletek nagy rsze egyezik az eszkztrak kialaktsval. Akkor mgis mirt kell beszlnnk rla? Azrt, mert itt

220

17. fejezet

Mensor, eszkztr

nem csak parancsot vihetnk fel, hanem menpontokat is. Menpontot egybknt akr egy eszkztrra is fel lehet tenni. A menpont mgtt nincs vgrehajthat mvelet. Ennek csak az a clja, hogy befogadja azokat a gombokat, amelyeket majd feltesznk. A men szerkezett tetszs szerint megvltoztathatjuk. j menpontokat, almenket hozhatunk ltre. Ez az egyetlen, de lnyeges klnbsg az eszkztrak s a menparancsok kialaktsa kztt. Ismt az egr jobb gombjval kattintsunk brmelyik eszkztrra, vagy a mensorra. A helyi menbl vlasszuk ki a Testreszabs (Customize) utastst. A megjelen prbeszdpanelben lapozzunk a Parancsok (Commands) lapra. Vlasszuk ki az j men (New Menu) legutols kategrit. Az ebben tallhat menponttal j menpontot hozhatunk ltre a mensorban. Fogjuk meg az j men (New Menu) szveget s hzzuk az Ablak [Window] s a Sg [Help] menpontok kz. Kattintsunk az j menpontra az egr jobb gombjval, s a megjelen helyi men Nv (Name) szerkesztdobozba rjuk be a Segdletek szveget. Vigynk alment az j menpont al. Ehhez fogjuk meg ugyanezt az j men (New Menu) gombot, az egr gombjt tartsuk lenyomott llapotban s vontassuk a Segdletek menpont fl.

70. bra: j menpont ltrehozsa Mikzben a menpontot vontatjuk, a mr mensoron lv menpontok s az almenpontok engedelmesen kinylnak. Az egrmutat mellett megjelenik egy fggleges vonal. Ez ugyangy, mint az eszkztraknl, azt a helyet mutatja, ahova az j menpont kerl az egr elengedse utn. Vigyk az j menpontot a rajzn lthat helyre. Amikor a menpontot elengedjk, akkor az lenyitva marad. Most kattintsunk r az egr jobb gombjval s adjuk meg az almen nevt: Szveges.
j almen
A estreszabs panel Parancsol lapjrl az j menpontot behzhatjuk egy msik man al is,

221

Kapcsolat a felhasznlval

4. rsz

A kvetkez lps, hogy a menhz utastst rendelnk. Az eljrs ugyanaz, mint az a gomb esetn volt, de most a Makrk (Macros) kategribl a Felhasznli mengomb (Custom Menu Item) szveg gombot visszk a Segdletek menpont Szveges almenpontba. Az utastst a helyi men Nv (Name) szerkesztdobozban nevezzk el Jelents kitltse nvvel. Az j utastshoz rendeljk hozz a Jelentes makrt. Ehhez kattintsunk az j utastsra az egr jobb gombjval, s a Makrhozzrendels (Assign Macro) utasts segtsgvel ugyangy rendeljk hozz a programunkat, mint ahogy azt az eszkztr gombjval tettk. Prbljuk meg a munkafzet tbbi eljrst is menparancshoz, vagy eszkztr gombjhoz rendelni. Ha a menpont feleslegess vlik, akkor a Testreszabs prbeszdpanel megnyitsa utn egyszeren fogjuk meg a menpontot, s hzzuk le a helyrl.

Menk, eszkztrak programozsa


Ezek j megoldsok, de htrnyuk, hogy minden gpen neknk kell elvgezni a hozzrendelsi mveleteket. Ha eddig eljutottunk a knyvben, jogos a krds, hogy mirt nem program segtsgvel tesszk fel a parancsokat? Ugyanis az eszkztrak s menk objektumok. Ha pedig objektumok, akkor programozni is lehet ket. Akkor most kvetkezzenek az eszkztrak s menk programozsi lehetsgei. Mint azt a fejezet korbbi rszben lttuk, az eszkztrak s a menk ugyanahhoz az objektumosztlyhoz tartoznak. Mind kt objektum a Commandbars gyjtemny elemei. Ha programozottan szeretnnk meghatrozni a jellemziket, akkor ennek a gyjtemnynek a rszleteit fogjuk programozni. A Commandbars gyjtemny magba foglalja az eszkztrakra s a mensorokra elhelyezett gombokat, menpontokat. Ezek a vezrlsek a CommandBarControls gyjtemny rszei. Ennek a kt objektumnak a megismersvel lehetsgnk nylik programbl megvltoztatni az Office alkalmazsok mensorainak s eszkztraink az sszelltst. A Commandbars gyjtemnyt ugyanis az sszes Office alkalmazsban megtalljuk. Ha szksges j ment s eszkztrat hozhatunk ltre. Felmerlhet a krds, hogy mennyit segtnk a felhasznln, ha runk egy olyan eljrst, ami parancsgombot helyez el egy j vagy mr meglv eszkztrra. Nem sokat, ha most ugyangy el kell indtania egy eljrst a Makr (Macros) panelbl, ami elhelyezi a gombot a megfelel helyre. Mi ht a megolds? Az, hogy eszkztr ltrehozst, mdostst annak a munkafzetnek az Open esemnyvezrelt eljrsba rjuk meg, amelyik a bvtmnyeket tartalmazza. gy, amikor megnyitjuk a munkafzetet,

Commandbars gyjtemny
Az eszkztrak s mensorok gyjtemnye.

222

17. fejezet

Mensor, eszkztr

megjelennek a vezrlsek is. Ha mr nincs rjuk szksg, akkor a makrt tartalmaz munkafzet Close esemnyben levehetjk a felesleges vezrlseket, megszntethetjk a munkafzethez tartoz eszkztrakat. Eszkzsor ltrehozsa w Ha nem szeretnnk az Office alkalmazshoz tartoz eszkztrakat megvltoztatni, akkor hozzunk ltre jat. Ezen helyezzk el majd azokat a gombokat, amelyekhez hozzrendeljk az egyedi eljrsainkat. Nyissuk meg az Utastssorok.xls munkafzetet, ebben az Eljrsok modulban nhny egyszer eljrst tallunk. Ezek az aktv munkalap A1-es celljba kirjk azt, hogy melyik eljrs futott le. Ezeket fogjuk elindtani az utastssorokra elhelyezett vezrlsekkel. Elsknt ismerjk meg azt, hogy miknt lehet ltrehozni egy j utastssort (Commandbar). Kapcsoljunk t VBE-be (ALT+F11). Kattintsunk kettt az UtastsSorok modulra. Ez egy res modul. Ebben fogjuk megrni az els utastssorok kezelst vgz eljrsainkat. Az UtastsSorok modul UjEszkoztr eljrsba rjuk be a kvetkez utastsokat:
Sub UjEszkoztr() Ebben az eljrsban j eszkztrat hozunk ltre A ltrehozott eszkztrra utastssor vezrlseket helyeznk el, ezek segtsgvel indtjuk el az Eljrsok modul eljrsait. On Error GoTo Hiba Vltozk llandk deklarlsa Dim cbrUjEszkt As CommandBar Const STR_NEVE As String = Sajt eszkztr j eszkztr ltrehozsa: Set cbrUjEszkt = CommandBars.Add(Name:=STR_NEVE, _ Position:=msoBarFloating, MenuBar:=False, _ Temporary:=True) cbrUjEszkt.Visible = True Exit Sub Hiba: If Err.Number = 5 Then Exit Sub Else Error.Err End If End Sub

Elemezzk ki az eljrst! A hibakezels clja az, hogy amikor mr ltrehoztuk az j eszkztrat, nem hozhatunk ltre mg egy ugyanolyan nevt. Ha az eljrst msodszor futtatjuk, az j eszkztrat ltrehoz sor hi-

223

Kapcsolat a felhasznlval

4. rsz

bt fog okozni. Ekkor mi elugrunk a Hiba cmkre, s ott be is fejezzk az eljrst az Exit Sub parancs hatsra. Az ezt kvet utastsban deklarljuk az j eszkztr azonostsra szolgl vltozt: cbrUjEszkt. Majd az STR_NEVE llandba elhelyezzk az j eszkztr nevt, melyet ksbb hasznlunk fel. A Set utastssal kezdd sorban hozzuk ltre magt az eszkztrat. A metdusnak ngy argumentuma van, az elsben adhatjuk meg az elksztend eszkztr nevt, a msodikban azt a helyet jellhetjk meg, ahol meg kvnjuk jelenteni az j eszkztrat. A MenuBar argumentum kt rtket vehet fel, ha ezt False-ra lltjuk be, akkor az j utastssor eszkztrknt fog viselkedni. A Temporary argumentumban arrl gondoskodhatunk, hogy mi trtnjen az utastssorral akkor, amikor bezrjuk azt a munkafzetet, amiben ltrehoztuk. Ha ezt az argumentumot True rtkre lltjuk, akkor az eszkzsor eltnik, amint lezrjuk azt a munkafzetet, amiben ltrehoztuk.
cbrUjEszkt.Visible = True

Vgl ezzel a parancssorral, megjelentjk a ltrehozott eszkztrat. Ez mg res, mincs rajta egyetlen vezrls sem. Errl mi fogunk gondoskodni. Mensor ltrehozsa w A kt eszkz kztt az eltrs csak egyetlen argumentum rtknek a meghatrozsban van. Ha ugyanis a MenuBar argumentumnak a True rtket adjuk, akkor a ltrehozott utastssor mensorknt fog mkdni. Mivel egy alkalmazsban egyszerre csak egy mensort jelent meg az sszes Office alkalmazs, a megjelents utn eltnik az eredeti mensor. Az eredeti mensor, csak akkor tr jelenik meg ismt, ha trljk az ltalunk ltrehozott mensort. A mensor kszt eljrs a kvetkez lesz:
Sub UjMenusor() Ebben az eljrsban j eszkztrat hozunk ltre A ltrehozott eszkztrra utastssor vezrlseket helyeznk el, ezek segtsgvel indtjuk el az Eljrsok modul eljrsait. On Error GoTo Hiba Vltozk llandk deklarlsa Dim cbrUjEszkt As CommandBar Const STR_NEVE As String = Sajt mensor j eszkztr ltrehozsa: Set cbrUjEszkt = CommandBars.Add(Name:=STR_NEVE, _ Position:=msoBarFloating, MenuBar:=True, _ Temporary:=True)

224

17. fejezet
cbrUjEszkt.Visible = True Exit Sub Hiba: If Err.Number = 5 Then Exit Sub Else Error.Err End If End Sub

Mensor, eszkztr

Az eljrs teljesen megegyezik az elzvel, a MenuBar argumentum rtknek a meghatrozsn s az elnevezsn kvl. Mensort elrejteni vagy megjelenteni csak programbl lehet. Ha ezt az eszkztrak testreszabsra szolgl prbeszdpanelbl szeretnnk megtenni, az Excel nem hajtja vgre az utastst, teht marad az Excel eredeti mensora. Mensor s eszkztr trlse w Ha lezrjuk azt a munkafzetet, amelyikben az eljrsaink vannak, nincs szksg az ltalunk ltrehozott eszkztrra, vagy mensorra. Meg kell teht szabadulnunk tle. Mivel a mensorok s az eszkztrak ugyanannak a gyjtemnynek a rszei, mindkt tpust ugyangy trlhetjk. gyeljnk arra, hogy pontos nvvel hivatkozzunk a trlend elemre. Az eljrs a kvetkez lesz:
Sub EszkTrl() Const STR_NEVE As String = Sajt eszkztr A ltrehozott eszkztr trlse On Error GoTo Hiba CommandBars(STR_NEVE).Delete Exit Sub Hiba: If Err.Number = 5 Then Exit Sub Else Error.Err End If End Sub

Menpontok
Az eszkztr vagy mensor ltrehozsa utn a kvetkez legyen a menpont. Menpontot elhelyezhetnk eszkztron is. A menpontok jabb menpontok befogadsra kpesek, vagyis egy-egy menpont al elhelyezhetnk almenket is. Kezdjnk egy j eljrst, amelyikben menket

225

Kapcsolat a felhasznlval

4. rsz

s almenket helyeznk el az elz rszben ltestett utastssorra. Az j eljrsba a kvetkez utastsokat rjuk le:
Sub MenuPontok() Dim cbrMenuSor As CommandBar Dim popMenu1 As CommandBarPopup Dim popSubMenu1 As CommandBarPopup Dim popSubMenu2 As CommandBarPopup Const STR_NEVE As String = Sajt mensor Const STR_MNU1_NEVE As String = E&gyedi men Const STR_SMNU1_NEVE As String = &Els almen Const STR_SMNU2_NEVE As String = &Msodik almen Set cbrMenuSor = CommandBars(STR_NEVE) Set popMenu1 = cbrMenuSor.Controls.Add _ (Type:=msoControlPopup) popMenu1.Caption = STR_MNU1_NEVE Set popSubMenu1 = popMenu1.Controls.Add _ (Type:=msoControlPopup) popSubMenu1.Caption = STR_SMNU1_NEVE Set popSubMenu2 = popMenu1.Controls.Add _ (Type:=msoControlPopup) popSubMenu2.Caption = STR_SMNU2_NEVE End Sub

Az eljrs ismt azoknak a vltozknak s llandknak a deklarlsval kezddik, amelyeket a felhasznlt objektumok azonostsra fogunk felhasznlni. A popMenu1 vltoz az utastssorra elhelyezett menpont azonostja lesz, a popSubMenu1 s a popSubMenu2 vltozk pedig a popMenu1 vezrlsbe elhelyezett almenk elnevezst fogjk szolglni.
Set cbrMenuSor = CommandBars(STR_NEVE)

A vltozk deklarlsa utn a ltrehozott mensort elnevezzk cbrMenuSor nvvel.


Set popMenu1 = cbrMenuSor.Controls.Add(Type:= msoControlPopup)

Ebben az utastsban a cbrMenuSor objektumhoz hozzadunk egy j menpontot. A Type argumentumban belltott msoControlPopup rtkkel hatrozzuk meg azt, hogy az j vezrls menpont legyen. Ugyanebben az utastssorban el is neveztk az j menpontot popMenu1 nvvel. Ez al utastsokat, vagy jabb menpontokat hozhatunk ltre. Ebben az eljrsban az utbbit tesszk.

226

17. fejezet
popMenu1.Caption = STR_MNU1_NEVE

Mensor, eszkztr

Ez az utastssor arra szolgl, hogy az elhelyezett menpontnak a feliratt meghatrozzuk. Ennek a feliratnak az rtkt jegyezzk meg, mert ha ksbb hivatkozni szeretnnk a most elhelyezett menpontra, akkor a hivatkozs sorn ezt a cmkt kell hasznlni.
Set popMenu1 = cbrMenuSor.Controls.Add _ (Type:=msoControlPopup)

Mivel a vezrlsnket elneveztk a popMenu1 vltozval, ezrt a tovbbiakban felhasznlhatjuk hivatkozsknt. Ha ezt nem tettk volna meg, akkor a kvetkez rsmddal hivatkozhattunk volna a ltrehozott vezrlsre:
Set popSubMenu1 = cbrMenuSor.Controls(STR_MNU1_NEVE).Controls _ .Add(Type:=msoControlPopup)

A kvetkez utastssorban az elhelyezett almen feliratt hatrozzuk meg. Ezt a feliratot a ksbbiekben ismt hasznlhatjuk arra, hogy hivatkozzunk az adott vezrlsre. Az eljrs kt utols sorban lert utastsok mg egy alment helyeznek el a menpont al. Az egyes menpontok szvegben tallhat & karakter jelzi, hogy a mgtte ll karakter a menpont billentykombincija lesz.
Set MenuSor = Application.CommandBars(AZONOST)

Ha az Excel sajt utastssorainak valamelyikre szeretnnk vezrlst elhelyezni, akkor a programunk csak annyiban fog vltozni, hogy az utastssor elnevezse sorn a CommandBars gyjtemny AZONOST szvege helyett, annak az utastssornak a nevt kell bernunk, amelyiket hasznlni szeretnnk. Az utastssorok nevt a mellkletben megtallhatjuk. Ezek kztt tallunk helyi menket is! Menpont trlse w Ha az egyes vezrlsek feleslegess vlnak, akkor azokat trlhetjk az utastssorrl. Mivel az almenk a menpont rszei, elegend azt a ment trlnnk, amelyiknek a rszeire nincs tovbb szksgnk. me egy plda az elbbi menk trlsre:
CommandBars(STR_NEVE).Controls(STR_MNU1_NEVE).Delete

Parancsok elhelyezse w A ltrehozott eszkztrakra, mensorokra s a menpontok al utastsokat helyezhetnk el. Ezekkel egyrszt elindthat-

227

Kapcsolat a felhasznlval

4. rsz

juk azokat az eljrsokat, amelyeket mi ksztettnk, msrszt mkdtethetjk az Excel beptett utastsait. Helyezznk el utastsokat az utastssor, a menpont s az almenpont al. Ezt szemllteti a kvetkez eljrs:
Sub Utastsok() Dim cbrMenuSor As CommandBar Dim popMenu1 As CommandBarPopup Dim popSubMenu1 As CommandBarPopup Dim popSubMenu2 As CommandBarPopup Dim cbbEgyediGomb1 As CommandBarButton Dim cbbEgyediGomb2 As CommandBarButton Dim cbbEgyediGomb3 As CommandBarButton Const STR_NEVE As String = Sajt mensor Const STR_MNU1_NEVE As String = E&gyedi men Const STR_SMNU1_NEVE As String = &Els almen Const STR_SMNU2_NEVE As String = &Msodik almen Const STR_EGYEDI_1_CIM As String = Egyedi egy Const STR_EGYEDI_2_CIM As String = Egyedi kt Const STR_EGYEDI_3_CIM As String = Egyedi hr Const STR_ELJ1 As String = Eljrs1" Const STR_ELJ2 As String = Eljrs2" Const STR_ELJ3 As String = Eljrs3" Set cbrMenuSor = CommandBars(STR_NEVE) Set popMenu1 = cbrMenuSor.Controls.Add(Type:=msoControlPopup) popMenu1.Caption = STR_MNU1_NEVE Set popSubMenu1 = popMenu1.Controls.Add(Type:=msoControlPopup) popSubMenu1.Caption = STR_SMNU1_NEVE Set popSubMenu2 = popMenu1.Controls.Add(Type:=msoControlPopup) popSubMenu2.Caption = STR_SMNU2_NEVE cbrMenuSor.Controls.Add Type:=msoControlButton, ID:=2 Set cbbEgyediGomb1 =_ cbrMenuSor.Controls.Add(Type:=msoControlButton) With cbbEgyediGomb1 .FaceId = 51 .Caption = STR_EGYEDI_1_CIM .OnAction = STR_ELJ1 End With popMenu1.Controls.Add Type:=msoControlButton, ID:=3 popSubMenu1.Controls.Add Type:=msoControlButton, ID:=4 Set cbbEgyediGomb2 = _ popSubMenu1.Controls.Add(Type:=msoControlButton)

228

17. fejezet
With cbbEgyediGomb2 .FaceId = 68 .Caption = STR_EGYEDI_2_CIM .OnAction = STR_ELJ2 End With Set cbbEgyediGomb3 = popMenu1.Controls.Add(Type:=msoControlButton) With cbbEgyediGomb3 .FaceId = 52 .Caption = Egyedi eljrs .OnAction = STR_ELJ3 End With End Sub

Mensor, eszkztr

Mivel ez az eljrs egy kicsit hossz, ezrt ezt tbb lpsben elemezzk. Az elemzs els rszlete legyen az objektum elnevezst vgz sorok megrtse.
Set cbrMenuSor = CommandBars(STR_NEVE) Set popMenu1 = cbrMenuSor.Controls.Add(Type:=msoControlPopup) popMenu1.Caption = STR_MNU1_NEVE Set popSubMenu1 = popMenu1.Controls.Add(Type:=msoControlPopup)

Ennek a rsznek a feladata az, hogy a menpontokat elnevezzk a deklarlt vltozk nevvel. Az eljrs elejn deklarljuk azokat a vltozkat, amelyeket az eljrsban hasznlni fogunk. Ezutn a Set kezdet sorokban elnevezzk azokat az objektumokat az utastssort, a menpontot s a kt almenpontot amelyek mr a rendelkezsnkre llnak. Ezekbe fogjuk elhelyezni az Excel beptett utastsait, s az eljrsok modulban megrt eljrsok indtst vgz parancsvezrlseket.
cbrMenuSor.Controls.Add Type:=msoControlButton, ID:=2

Ez az utasts az utastssorra kzvetlenl helyezi el a kettes azonostszm Excel utastst. Ez a Helyesrs utasts. Ebben az esetben mr korbban megneveztk az utastssort egy vltoz segtsgvel. Itt mr csak a vezrlst kell hozzadnunk. Ennek a tpusa gomb s az azonostja a kettes szm.
Set cbbEgyediGomb1 = cbrMenuSor.Controls.Add(Type:=msoControlButton) With cbbEgyediGomb1 .FaceId = 51

229

Kapcsolat a felhasznlval
.Caption = STR_EGYEDI_1_CIM .OnAction = STR_ELJ1 End With

4. rsz

Ebben a programrszben egyedi eljrs indtsra hasznljuk az utastssorra elhelyezett vezrlst. A Set sorban elhelyeznk egy gombot az utastssoron, majd a kvetkez lpsekben meghatrozzuk a jellemzit. Ezek sorrendben a kvetkezk: FaceID, a gomb felleti rajza. A Caption ketts clt szolgl. Egyrszt ez a szveg jelenik meg a gomb mellett, ha menknt hasznljuk, msrszt ez a szveg jelenik meg akkor, amikor az egeret a gomb fl hzzuk. Az OnAction tulajdonsg mg, szvegllandknt vagy szveget tartalmaz vltozknt rjuk annak az eljrsnak a nevt, amelyiket szeretnnk elindtani akkor, amikor a vezrlsre rkattintunk. Az eljrs tovbbi rszei hasonlak, mint az itt elemzett rsz a klnbsg sszesen annyi, hogy a men s az almen al helyez el vezrlst. Ezeket nem rszletezzk.

Bvtmnyek ltrehozsa
Ahogy a fejezet elejn olvashattunk, lehetsgnk van arra is, hogy a makrkat tartalmaz munkafzetet, bvtmnny alaktsuk. Tltsk be a CD mellklet Menusor eszkoztar mappjbl a Bvtmny.xls fjlt. Ebbl fogunk bvtmnyt ltrehozni.

A bvtmny elksztse
Elszr rviden nzzk meg azt, hogy hogyan hasznlhatjuk a bvtmnyeket. A Microsoft Excellel egytt kapunk bvtmnyeket, melyek teleptskor egy kln erre a clra fenntartott mappba kerlnek. Azon a meghajtn, amire az Office alkalmazsokat teleptettk, keressk meg a Program files\Microsoft office\Office mappt. Ebben megtalljuk a Makro (Library) mappt. Itt talljuk a bvtmnyeket. Clszer lesz neknk is ide menteni a sajtjainkat, mert akkor a bvtmnykezel felismeri azokat, s hasznlatra felknlja. A bvtmnyek kiterjesztse XLA. Ha ezek kzl valamelyiket megnyitjuk, akkor hasznlhatjuk a bennk megrt fggvnyeket, illetve eljrsokat. rdemes megjegyezni, hogy ha kzvetlenl a Megnyits panellel tltjk be a bepl programokat, akkor csak addig llnak rendelkezsnkre az eszkzei, amg ki nem lpnk az Excelbl, azaz a kvetkez betltskor mr nem hasznlhatjuk ket. Msik mdszer a bvtmnyek elrsre, hogy valamelyik indtknyvtrba mentjk a beplt. Az igazn helynval megolds azonban

230

17. fejezet

Mensor, eszkztr

az, hogy az Excel megnyitsa utn a beplt hozzkapcsoljuk maghoz a programhoz. Ennek rdekben vlasszuk ki az Eszkzk (Tools) Bvtmnykezel (Add-Ins) utastst. Eredmnykppen megjelenik egy prbeszdpanel, amelyik felknlja a Makro (Library) mappban tallhat bvtmnyeket. Ha brmelyik bepl eltt tallhat vlasztkapcsolt bekapcsoljuk, akkor kijelltk az adott beplt arra, hogy betltdjn. A betltsre akkor kerl sor, amikor a prbeszdpanel OK gombjra kattintunk. A tovbbiakban, az Excel betltsekor automatikusan betltdnek a kivlasztott beplk mindaddig, amg a bvtmnykezelben ki nem kapcsoljuk. Figyeljk meg azt is, hogy amint rkattintunk az egrrel egyik vagy msik bvtmnyre, a panel aljn megjelenik egy rvid lers arrl, hogy mire hasznlhat a kivlasztott bvtmny. Arrl, hogy ez a magyarzat megjelenjen, neknk kell majd gondoskodnunk. Ezt gy tehetjk, hogy ments eltt kitltjk a munkafzet adatlapjt. Az adatlap prbeszdpanelt a Fjl (File) Adatlap (Properties) utasts segtsgvel jelenthetjk meg. Az adatlaprl kerl a listba a bvtmny neve is. Ha valban szeretnnk megvdeni a programunkat az illetktelen behatolstl, akkor a projektet vdjk le jelszval. Ezt a VBE nzetben tehetjk meg. Nzzk most mr gyakorlatban is a bvtmny-ksztst. A lemezmellkletrl tltsk be a Bvtmny nev munkafzetet. Ebben egy egyszer fggvnyt s egy korbban elksztett rlapot tallunk. Ezt a munkafzetet mentjk majd el bvtmnyknt. Ksztsk el. A munkafzet megnyitsa utn vlasszuk ki a Fjl (File) Adatlap (Properties) utastst. A megjelen adatlapban lapozzunk az Adatlap lapra s rjuk be a cmet s a megjegyzst a szerint.

71. bra: A kitlttt adalapbl megjelen rtkek

231

Kapcsolat a felhasznlval

4. rsz

Ezutn kapcsoljunk t a VBE-be s lltsuk be a projekt tulajdonsgait. Ehhez vlasszuk ki a VBE Eszkzk (Tools) VBAProject tulajdonsgai (VBAProject Properties) utastst. A megjelen panel kt lapbl ll. Az els egy ltalnos (General) lap a msik pedig a projekt Vdelem (Protection) belltsra szolgl lap. Az ltalnos lapon elnevezhetjk a projektet, egy rvid lerst mellkelhetnk hozz, valamint meghatrozhatjuk a sg fjl jellemzit. A vdelem lapon pedig jelszt adhatunk meg annak rdekben, hogy a projektet csak az lthassa, aki ismeri a jelszt. Itt kapcsoljuk be a Projekt zrolsa a megtekints ell (Lock project for viewing) lehetsget s rjuk be a jelszt a Jelsz (Password) szerkesztdobozba. A jelszt ismteljk meg a Jelsz megerstse (Confirm password) dobozban is. Ezutn kattintsunk az OK gombra. Ezzel befejeztk az elksztst. Mentsk el a projektet. Trjnk vissza az Excelbe s vlasszuk a Fjl (File) Ments msknt (Save As) utastst. A megjelen panelben nyissuk le a Fjltpus (Save as Type) listapanelt. A listbl vlasszuk ki a Microsoft Excel bvtmny (Microsoft Excel Add-in (*.xla)) lehetsget s mentsk a munkafzetet a bvtmnyek szmra fenntartott mappba (Program files\Microsoft office\Office\Makro (Library)).
A projekt jelszavas vdelme
A programozsi rszt kln is vhatjk jelszval.

72. bra: A projekt jelszavas vdelmnek a belltsa Az eredmny az Excel betltse utn lesz lthat ezrt zrjuk le az Excelt, majd ismt tltsk be. Csatoljuk a bvtmnyt az Excelhez. Hajtsuk vgre az Eszkzk (Tools) Bvtmnyek (Add Ins) utastst. A megjelen prbeszdpanelben keressk meg azt a beplt, amit most mentettnk el. Azt az elnevezst keressk, amit az adatlap Cm szerkesztdobozba rtunk. Ha kijelljk az ltalunk ksztett bvtmnyt, akkor a panel lapjn megjelenik az a magyarzat, amit az adatlap megjegyzs rovatba rtunk. Kapcsoljuk be a jellngyzett.

232

17. fejezet

Mensor, eszkztr

Ha ezutn megnzzk az Ablak (Window) Felfeds (Unhide) utastsa utn megjelen panelt nem fogjuk benne tallni a Bvtmny munkafzetet. St, ha megnzzk a vgrehajthat eljrsokat az Eszkzk (Tools) Makr Makrk utastsban, ott sem fognak megjelenni a bepl munkafzet eljrsai. Ha tkapcsolunk a VBE-be, akkor a projektek kztt megjelenik ugyan az j bvtmny, de ezt mr csak az nzheti meg, aki ismeri a projekt jelszavt.

Elkszts futsi idben


Ebben a projektben kt egyszer program van az egyik egy fggvny, a msik pedig az Excel belltst szolgl panel. A fggvnyt azonnal hasznlatba vehetjk. Ha megnzzk a fggvnyvarzslt, akkor a Felhasznli fggvnycsoportban megleljk a KerekErre fggvnyt. A fggvnyt elhelyezhetjk tetszleges fggvnycsoportban, de ehhez mg kicsit programoznunk kell. A belltsra szolgl eljrst nem talljuk sehol. Ha megnzzk az elrhet makrkat (Eszkzk (Tools) Makr (Macro) Makrk (Macros) utasts segtsgvel), azt fogjuk tapasztalni, hogy az eljrsok nem jelennek meg. Teht elrejtettk a felhasznl ell azokat az eljrsokat, amelyeket mi hoztunk ltre. Ezek indthatsgrl mi fogunk gondoskodni. Az eddig megismert egyik mdszerrel nyissuk meg a Bvtmny projektet. Kapcsoljunk t a VBE-be s kattintsunk kettt a Bvtmny projekt jelre. Ha jelszval vdtk, akkor megjelenik egy prbeszdpanel. Innen csak akkor lphetnk tovbb, ha ismerjk a jelszt. Miutn belptnk a projektbe, kattintsunk kettt a ThisWorkbook szvegre. Ez a Bvtmnyek projekt munkafzete. A megjelen modul ablak baloldali listjbl vlasszuk ki a Workbook elemet. Ennek hatsra megjelenik az alaprtelmezsnek megfelel Open esemny. Ha a bvtmny betltse sorn szeretnnk vgrehajtani utastsokat, akkor azokat ebbe az eljrsba kell megrnunk, hiszen amikor a bvtmnyt tartalmaz munkafzetet betlti az Excel, akkor megnyitja ezt a fzetet, s vgrehajtja az Open esemnyt. Ide lerhatjuk a fggvnyek kategrikba sorolshoz szksges programlpseket s kiadhatjuk azokat az utastsokat, amelyek segtsgvel a munkafzet betltsekor menpontot, vagy eszkztr gombot jelentnk meg. Ezekhez hozzrendelhetjk a bvtmnyben lert eljrsok indtst. Ha a bvtmnyt eltvoltjuk az Excelbl, akkor gondoskodnunk illik arrl is, hogy a futsi idben megjelentett menpontokat s utasts gombokat megszntessk. Ezt a munkafzet BeforeClose eljrsban tehetjk meg. A fggvnyek csoportjnak a meghatrozsrl nem kell gondoskodnunk, mivel a fggvny automatikusan eltnik a varzslbl, amikor a bvtmnyt eltvoltjuk.

233

Kapcsolat a felhasznlval

4. rsz

A fggvny jellemzk meghatrozsa


Hatrozzuk meg azt, hogy a KerekErre fggvny a statisztikai csoportba kerljn. Adjunk egy rvid lerst a fggvny hasznlathoz. Ehhez teht lpjnk be a bvtmny ThisWorkbook eljrsba. Ide rjuk be a kvetkezket:
Private Sub Workbook_Open() Fggvnycsoport llandk Const BYT_PENZUGYI As Byte = 1 Const BYT_DATUM_IDO As Byte = 2 Const BYT_MAT_TRIG As Byte = 3 Const BYT_STATISZTIKA As Byte = 4 Const BYT_MATRIX As Byte = 5 Const BYT_ADATBAZIS As Byte = 6 Const BYT_SZOVEG As Byte = 7 Const BYT_LOGIKAI As Byte = 8 Const BYT_INFORMACIO As Byte = 9 Const STR_KEREK_ERRE As String = KerekErre Const STR_LEIRAS As String = _ Kerekti a szmot az Egysg _ & argumentumban megadott rtkhez. Application.MacroOptions _ Macro:=STR_KEREK_ERRE, _ Description:=STR_LEIRAS, _ Category:=BYT_STATISZTIKA End Sub

Az eljrs elejn az llandkat csak a szemlltets kedvrt hatroztuk meg. Ebbl azt tudhatjuk meg, hogy melyik fggvnykategrinak mi a sorszma. Jelen eljrsban elegend lett volna a statisztikai llandt meghatrozni, ha a fggvnyt ebbe a csoportba szeretnnk beilleszteni. A kvetkez llandban annak a fggvnynek a nevt hatroztuk meg, amelyiknek a tulajdonsgait most fogjuk belltani. Ez a KerekErre fggvny. Ezutn a fggvny magyarzat szvegt deklarljuk. Az llandk deklarlsa utn jhet maga a belltst elvgz utastssor. Ha egy fggvny tulajdonsgait kvnjuk belltani, akkor elegend a metdusnak csak a pldban lthat hrom argumentumt meghatrozni. Az egyes argumentumok nevei magukrt beszlnek. Ennek megfelelen a Macro argumentumban azt kell meghatroznunk, hogy melyik fggvny tulajdonsgait lltjuk be, vagyis a fggvny nevt. A Description argumentumban a magyarz szveget hatrozhatjuk meg, s vgl a

234

17. fejezet

Mensor, eszkztr

Category-ban azt llthatjuk be, hogy a megnevezett fggvny melyik csoportba kerljn. Mivel ez az eljrs minden esetben lefut, amikor betltjk ezt a munkafzetet, minden esetben a megfelel csoportba kerl az ltalunk rt fggvny. A bvtmny elfedi a felhasznl ell azt a munkafzetet, amelyben a bel rt eljrsok vannak. Nem kell rejtett fzetknt menteni, s egy kis programozssal a felhasznl gy fogja tallni, hogy a mi eljrsaink is rszei az Excel-nek. Tetszs szerint be s kikapcsolhatjuk a bvtmnyeinket. Ha szksges jelszval vdhetjk brmelyik munkafzet moduljait, gy a bvtmnyekt is. Ezzel elkerlhetjk az illetktelen kezek munkjt. A bvtmnyek betltse olyan jl elfedi az eljrsainkat, hogy a Makrk (Macros) panelben sem jelennek meg azok. Ez j is meg rossz is. J, mert nem fr hozz a felhasznl. Rossz, mert nem fr hozz a felhasznl. A j az a dologban, hogy nem indthatja el senki az eljrsunkat. gy viszont neknk kell gondoskodnunk arrl, hogy a megfelel eszkztr gombok megjelenjenek, s a megfelel menparancsok is a helykre kerljenek. Most fogjuk csak igazn hasznt venni az esemnyvezrelt eljrsoknak. A bvtmnyknt mentett munkafzet Open megnyitsra esemnybe olyan programot fogunk rni, ami elhelyezi a szksges gombokat mind az eszkztrakra, mind pedig a menparancsok kz. A Close bezrs esemnyt pedig arra fogjuk felhasznlni, hogy levegyk azokat a gombokat, menparancsokat, amelyeket mi tettnk fel.

Billenty-kombincik programozsa
Ennek a meghatrozst a legegyszerbben gy tehetjk meg, hogy mieltt a munkafzetet bvtmnyknt mentennk, az Eszkzk [Tools] Makr [Macro] Makrk [Macros] utastssal megjelentett prbeszdpanelben rkattintunk az Egyebek [Options] gombra s a megjelen panelben megadjuk az eljrs a billentykombincijt (). Termszetesen a MacroOptions metdus segtsgvel ezt megtehetjk akkor is, amikor a bvtmnyt hasznlatba vesszk, vagyis a bvtmnyt tartalmaz munkafzet Open esemnyt felhasznlva. A Bvtmny munkafzet Open esemnyt bvtsk a kvetkez sorokkal.
Const STR_BEALL As String = eljGyorsBell Const STR_BEALL_LLEIRAS As String = _ A munkafzet gyors belltsa Const STR_BILLENTYU As String = U Application.MacroOptions Macro:=STR_BEALL, _ Description:=STR_BEALL_LLEIRAS, _ hasShortCutKey:=True, _

235

Kapcsolat a felhasznlval
ShortcutKey:=STR_BILLENTYU

4. rsz

73. bra: Billennty-kombincik belltsa kzzel Az llandk meghatrozsa utn lltsuk be az eljrs jellemzit. Hatrozzuk meg a magyarzatt s azt a billentykombincit, amelyikkel a bvtmny betltse utn elindthatjuk az eljrst. A MacroOption metdus Macro argumentumban azt hatrozzuk meg, hogy melyik eljrshoz rendelnk billentyt. Ez a mi esetnkben az eljGyorsBell lesz. Az eljrs nevt eljrs elejn az STR_BEALL llandban troljuk. A Description argumentumot arra hasznljuk, hogy az eljrs magyarzatnak rtket adjunk. Ezt akr el is hagyhatjuk. A hasShortCutKey argumentum az Excelnek szl. Itt mondjuk meg, hogy az eljrshoz billentykombincit fogunk hozzrendelni. A ShortcutKey argumentumban pedig egy bett vlaszthatunk, amivel az eljrst majd mkdsbe hozhatja a felhasznl. Amikor a kzi bellts lehetsgt vlasztjuk, akkor is ezeket az argumentumokat hatrozzuk meg, csak akkor egy prbeszdpanelt hasznlunk a belltshoz (). Az utasts eredmnyeknt ezt az eljrst a SHIFT+CTRL+u billenty-kombincival indthatjuk el.

sszegezve
Mivel a bvtmnyknt elmentett munkafzet eljrsai nem jelennek meg az elindthat eljrsok listjban (Eszkzk (Tools) Makr (Macro) Makrk (Macros) utasts), biztostanunk kell a felhasznlnak az indts lehetsgt. Erre hrom mdszer knlkozik. Az eljrshoz billenty-kombincit vagy menutastst rendelhetnk, illetve az eszkztr egyik gombjhoz kapcsolhatjuk a bvtmnyben megrt eljrst. Gyakran hasznlt eljrsok esetn akr egyszerre hasznlhatjuk mind a hrom eszkzt. Az egyes indtsi mdszereknek megvan az elnyk s a htrnyuk. A billentykombinci pldul gyorsan vgrehajthat, de nehz megjegyez-

236

17. fejezet

Mensor, eszkztr

ni. Az eszkztr gyors is s mindig lthat is, de a felhasznlnak meg kell jegyeznie a megfelel gombot. A men szvege tjkoztatja a felhasznlt arrl, hogy mi trtnik, ha kivlasztja a megfelel menutastst, de tbb lpsre van szksg az utasts kivlasztshoz, vagyis lass mdszer.

237

18. fejezet

Kapcsolat ms programokkal
allkozhatunk olyan idszakonknt ismtld feladattal, amikor az Excelben elksztett munknk eredmnyt t kell tennnk a Word-be, vagy ppen idszakonknt prezentci forrsaknt szolgl az Excelben ltrehozott dokumentum. Ennek a feladatnak az elvgzshez termszetesen rendelkezsnkre ll a vglap is, ha azonban ezt a feladatot gyakran kell vgrehajtanunk, vagy olyan munkatrsunk vgzi, aki nem elgg tjkozott a msols mveletben, akkor segtsget nyjthatunk neki a folyamatok automatizlsval. Ehhez ismernnk kell annak az alkalmazsnak az objektumait, amelyiket az Excelbl szeretnnk vezrelni. Szerencsre a programozs eszkze a tbbi Office alkalmazsban is a VBA. Kisebb problmt, csak az fog okozni, hogy ebben a knyvben nem lesz lehetsgnk a tbbi alkalmazs objektumainak rszletes bemutatsra. De az Office alkalmazsok tbbsgben is j segtsget nyjt a makr rgzts. A krdsek a kvetkezk legyenek: w Hogy rhetjk el Excelbl a tbbi Office alkalmazst? w Hogy programozhatjuk Excelbl az Office alklamazsokat?

Az Office alkalmazsok hasznlata


Az els lps minden esetben az, hogy az ltalunk rt eljrsbl el kell rnnk a hasznlni kvnt alkalmazst. Mivel ezek is objektumok, itt is hivatkozni kell tudni. Erre tbb lehetsgnk is van. Az egyik az, amikor hasonlan jrunk el, mint az egyedileg ltrehozott objektumaink hasznlata esetn, azaz j objektumknt deklarljuk a kvnt alkalmazst. A msik mdszer, amikor a CreateObject fggvnyt hasznljuk az alkalmazs megszltsra. Egy jabb lehetsg pedig, amikor egy fut alkalmazs szolgltatsait vesszk ignybe.

239

Kapcsolat a felhasznlval

4. rsz

Kapcsolat ltrehozsa
References
Kapcsoljuk be azt az objektumot, amelyiket szeretnnk elrni a programunkbl.

Az emltett hrom mdszert egyszer pldkon keresztl fogjuk megismerni. A legels feladat kapcsolatot teremteni a kvnt alkalmazssal. Tltsk be az Excelt s kapcsoljuk be a VBE programot. A VBE programban vlasszuk ki az Tools References utastst. Az utasts eredmnyeknt meg fog jelenni egy prbeszdpanel, amiden meghatrozhatjuk azokat az alkalmazsokat, amelyeket ltni szeretnnk az Excelbl is. A megfelel objektum-knyvtrat be kell kapcsolnunk a hasznlatbavtel eltt, klnben az Excel nem ismeri fel (74. bra). Megrhatjuk az els eljrsunkat, amelyik hasznlja a Word szvegszerkesztt.

74. bra: Kapcsoljuk be a hasznlni kvnt objektumknyvtrat


Sub WordExcelbol() Dim appWord As New Word.Application Const STR_SZOVEG As String = _ "Szveg a Word szvegszerkesztbe!" appWord.Visible = True appWord.Documents.Add appWord.Selection.TypeText STR_SZOVEG End Sub

New kulcssz
A new kulcsszval j objektumelford ulst hozhatunk ltre.

Az eljrs els utastsa a Dim. Ebben hatrozzuk meg azt, hogy az eljrsban hasznlni fogjuk a Word szvegszerkesztt. Amikor a deklarlskor az As kulcssz mg berjuk a New szt, a Word alkalmazs objektum j elfordulst hoztuk ltre. A Word ennek a programsornak a hatsra mg nem tltdik be, csak majd ha hasznlatba vesszk.
appWord.Visible = True

240

18. fejezet

Kapcsolat ms programokkal

Erre az utastsra most a szemlltets kedvrt van szksgnk. Ez a sor azt eredmnyezi, hogy megjelenik a Word, ugyangy mintha betltttk volna. Azaz csak majdnem ugyangy, mivel ezutn az utasts utn, mg nem lesz egyetlen megnyitott dokumentum sem.
appWord.Documents.Add

Figyeljk meg, hogy a Word-ben ugyangy kezdhetnk j dokumentumot, mint ahogy az Excelben egy j munkafzetet kezdtnk. Teht itt is az Add metdust hasznljuk, de mivel a Word nem munkafzettel dolgozik, itt a Documents gyjtemnybe vesznk fel egy j elemet.
appWord.Selection.TypeText STR_SZOVEG

A kvetkez utastssal egy llandban trolt szveget runk a Word dokumentum ppen kivlasztott (Selection) pontjra, vagyis oda, ahol a szvegkurzor ppen ll. Futtassuk le eljrsunkat, s kzben figyeljk meg, mi trtnik a kpernyn. Az eljrs vgrehajtsa utn zrjuk le a szvegszerkesztt.

75. bra: Az eljrs futtatsa utn ezt ltjuk a Wordben Ennek a mdszernek az a htrnya, hogy csak a hivatkozsokban bekapcsolt objektumokat hasznlhatjuk. Ez akkor nem is okoz problmt, ha magunknak runk programot s gondoskodunk arrl, hogy a hivatkozsok be legyenek kapcsolva. Ha azonban msnak ksztjk a programot,

241

Kapcsolat a felhasznlval

4. rsz

akkor ezt ppen azrt tesszk, hogy a kell ismeretek hinyban is hasznlhassk azt. Ebben az esetben msik mdszerhez kell nylnunk.

Objektum ltrehozsa
A kvetkez mdszert akkor is hasznlhatjuk, ha elre nem kapcsoltuk be annak az alkalmazsnak vagy objektumnak a hivatkozst, amit hasznlni szeretnnk. Az elz feladatot oldjuk meg mg egyszer, de eltte kapcsoljuk ki azt a hivatkozst, amitl az Excel VBA rismert a szvegszerkesztre. Teht a VBE-ben hajtsuk vgre az Tools Reference utastst s a megjelen prbeszdpanelben kapcsoljuk ki a Word objektumknyvtrat (76. bra). Prbljuk meg ismt lefuttatni az eljrst. Az eredmny egy hibazenet lesz.

CreateObject
A CreateObject fggvnnyel ltrehizhatjuk gy is a kapcsolatot, hogy nem kapcsoljuk be az adott objektumot a References panelben

76. bra: A referencia nlkl futtatott eljrs hibazenete rjuk t az elz eljrst. Ezttal hasznljuk a CreateObject fggvnyt. Az eljrs teht a kvetkez lesz:
Sub WordExcelbol() Dim appWord As Object Const STR_OBJECT_TYPE As String = "Word.Application" Const STR_SZOVEG As String = _ "Szveg a Word szvegszerkesztbe!" Set appWord = CreateObject(STR_OBJECT_TYPE) appWord.Visible = True appWord.Documents.Add appWord.Selection.TypeText STR_SZOVEG End Sub

242

18. fejezet

Kapcsolat ms programokkal

Az eljrs vgrehajtsnak az eredmnye ugyanaz lesz, csak most nem kell gondoskodnunk a hivatkozsrl, teht brmelyik gpen futtathatjuk, amelyikre korbban Word szvegszerkesztt teleptettnk.
Dim appWord As Object

Fedezzk fel, hogy most objektumnak deklarltuk az appWord vltozt. Ez azonban csak az egyik klnbsg. A msik az, hogy a hasznlatbavtel eltt el kell neveznnk a szvegszerkesztt a Set utasts segtsgvel.
Set appWord = CreateObject(STR_OBJECT_TYPE)

Ebben a sorban lnyeges, hogy a fggvny argumentumban szvegllandknt kell meghatroznunk azt, hogy melyik alkalmazssal kvnunk dolgozni. Ha a gpnkre valamelyik alkalmazs korbbi vltozatt is teleptettk, akkor hasznos az Application kulcssz mg berni a vltozat szmt is. Ebben az esetben, az egybknt nagyon figyelmes s szolglatksz VBE, nem knlja fel a lehetsges alkalmazsokat, gy a lehetsgeket neknk kell tudnunk. Ezek a kvetkezk: 8. tblzat: Alkalmazsok szveglland hivatkozsai
Alkalmazneve Microsoft Excel Excel munkafzet Excel munkalap Excel diadram Microsoft Access Microsoft PowerPoint Microsoft Word Word dokumentum Microsoft Binder Microsoft Outlook Hivatkozs szvege Excel.Application Excel.Workbook Excel.Worksheet Excel.Chart Access.Application PowerPoint.Application Word.Application Word.Document OfficeBinder.Application Outlook.Application Office objektumok
Az Office alkalmazsokban tallhat objektumokra a tblzatban lthat szvegllandkkal hivatkozhatunk.

Ltez dokumentum kezelse


Ha egy korbban elksztett dokumentumhoz szeretnnk hozzfrni, annak adataival szeretnnk mveletet vgrehajtani, akkor a GetObject fggvnyt kell hasznlnunk. Nmelyik alkalmazs esetn a fggvny

243

Kapcsolat a felhasznlval

4. rsz

hasznlata eltt gondoskodnunk kell arrl, hogy megnyissuk azt az alkalmazst, amelyik dokumentumt hasznlni kvnjuk.
Programozott adattads
Szksg esetn egy ltez dokumentumba is tadhatunk adatokat.

Adatok tadsa a programok kztt w Ksztsnk egy pldt, amelyikben egy Word dokumentum szvegt tvisszk az Excelbe. A programot Excelben rjuk meg. Elsknt hozzunk ltre egy Word dokumentumot. Ebben legyen hrom bekezds. A dokumentumot mentsk el. Jegyezzk meg a dokumentum nevt s a ments helyt. Ezekre szksgnk lesz az eljrs megrsa sorn.

77. bra: A Word dokumentum elksztse Nyissuk meg a Word szvegszerkesztt. A megjelen j dokumentumba rjunk be hrom tetszleges tartalm bekezdst. Utna mentsk el a dokumentumot. A knyv pldjban a C merevlemez fknyvtrba kerlt a dokumentum s a neve Get.doc. Ezutn zrjuk le a szvegszerkesztt. Tltsk be az Excelt. Kapcsoljunk t a VBE programba. Ne felejtsk el ellenrizni s szksg esetn bekapcsolni a Word objektumknyvtr hivatkozst a References panelben. Az j projektbe szrjunk be egy j modult, s rjuk be a kvetkez eljrst:
Sub GetWordDok() Dim docWord As Word.Document Dim parBekezd As Word.Paragraph Dim intI As Integer Const STR_WORD_DOC As String = "C:\Get.doc" Const STR_OBJECT_TYPE As String = "Word.document" Const STR_CELL_1 As String = "A4" Const STR_CELL_2 As String = "A5"

Word.Document
Ezzel az objektummal frhetnk hozzs egy ltez Word dokumentumhoz.

244

18. fejezet

Kapcsolat ms programokkal
GetObject
A GetObject fggvnnyel ltez dokumantumok hoz frhetnk hozz.

intI = 1 Set docWord = GetObject(STR_WORD_DOC, STR_OBJECT_TYPE) For Each parBekezd In docWord.Paragraphs Cells(intI, 1) = parBekezd intI = intI + 1 Next parBekezd Range(STR_CELL_1) = docWord.Parent.Name Range(STR_CELL_2) = docWord.Name End Sub

Az eljrs elejn deklarljuk azokat a vltozkat, amelyeket hasznlni fogunk. Ezutn elnevezzk a ltrehozott szveg dokumentum objektumot, docWord nvvel.
Set docWord = GetObject(STR_WORD_DOC, STR_OBJECT_TYPE)

A GetObject fggvnynek kt argumentuma van, az egyik a hasznlni kvnt dokumentum elrsi tvonala s a fjl neve, a msik pedig az objektum osztly meghatrozsa. A mi esetnkben az objektum osztly a Word dokumentum. Az eljrs csak akkor fog helyesen mkdni, ha a megfelel elrsi tvonalat rtuk be. gyeljnk teht arra, hogy a knyv pldja nem rhat t bet szerint.
For Each parBekezd In docWord.paragraphs Cells(intI, 1) = parBekezd intI = intI + 1 Next parBekezd

78. bra: Az eljrs futsa utni eredmny az Excelben

245

Kapcsolat a felhasznlval

4. rsz

Ebben a ciklusban vgiglpkednk a Word dokumentum minden bekezdsn s tmsoljuk a kiolvasott szveget az Excel aktulis munkalapjnak celliba. Az intI rtkt a Cells paramtereknt hasznljuk fel, gy az egyes bekezdsek egyms alatti, cellkban fognak megjelenni.
Range(STR_CELL_1) = docWord.Parent.Name Range(STR_CELL_2) = docWord.Name

A kvetkez kt utasts csak azt kvnja szemlltetni, hogy a Word tovbbi tulajdonsgaihoz is hozzfrhetnk. Az Parent tulajdonsg a szl objektum. Mivel a dokumentum a Word-ben kszlt, ezrt ebben az esetben a szl a Word szvegszerkeszt. A msodik utastssor a megnyitott dokumentum nevt rja az A5-s cellba. Az eljrs vgrehajtsa utn az aktulis munkalap celliban az rajznak megfelel adatokat olvashatjuk. Ez az t oda-vissza jrhat. Ez azt jelenti, hogy rhatunk olyan eljrst is, amelyik az Excel-ben kszlt s az Excel-bl visz t adatokat a szvegszerkesztbe. Termszetesen lehetsgnk van arra is, hogy a szvegszerkesztben runk egy eljrst, ami kpes mindkt irnyban adatot mozgatni.
Word formzs
Ha tudunk hivatkoni egy ltez dokumentumra, akr meg is formzhatjuk a szvegt, mg Excelbl is.

Word szveg formzsa Excel makrval w Egy rdekes megolds lehet az is, hogy a szvegszerkeszt dokumentumban trolt szvegeket az Excelben rt eljrs segtsgvel formzzuk meg. Az eljrs elindtsa eltt be kell tlteni a kiszolgl programot. Ez jelen esetben a Word. A mdostand dokumentumot nem kell s nem is szabad megnyitnunk. Ezt majd elvgzi az eljrs. Nzznk erre is egy pldt, hasznljuk fel az elz feladatban ltrehozott szveg dokumentumot:
Sub WordDokFormatum() Dim docWord As Word.Document Const BYT_WORD_HEADING_1 = -2 Const BYT_WORD_HEADING_2 = -3 Const BYT_WORD_HEADING_3 = -67 Const STR_WORD_DOC As String = "C:\Get.doc" Const STR_OBJECT_TYPE As String = "Word.document" Set docWord = GetObject(STR_WORD_DOC, STR_OBJECT_TYPE) docWord.Paragraphs(1).Style = (BYT_WORD_HEADING_1) docWord.Paragraphs(2).Style = (BYT_WORD_HEADING_2) docWord.Paragraphs(3).Style = (BYT_WORD_HEADING_3) End Sub

Az elz eljrshoz hasonlan a mdostand dokumentumhoz a GetObject fggvnnyel frnk hozz. A kvetkez hrom sorban az egyms utn kvetkez bekezdseket formzzuk meg a Word stlusaival. Itt rdemes megemlteni az eljrs elejn deklarlt llandkat. Ezek a nevt s

246

18. fejezet

Kapcsolat ms programokkal

rtkt a szemlltets kedvrt a Word sgjbl vettk. Vagyis a Word stlusait szmokkal is meghatrozhatjuk. A stlusokat a nevkkel is megadhattuk volna:
docWord.Paragraphs(1).Style = (BYT_WORD_HEADING_1) docWord.Paragraphs(2).Style = (BYT_WORD_HEADING_2) docWord.Paragraphs(3).Style = (BYT_WORD_HEADING_3)

A Style zrjelei kz szvegllandknt berhatjuk a stlus nevt is. Ennek az a szpsghibja, hogy a magyar Word esetn a magyar neveket kell rnunk, az angol esetn pedig az angol neveket. Emiatt az eljrs a programban szerepl eltr stlusnevek miatt nem fut mindegyik nyelvi vltozatban. Vglap hasznlata makrbl w A Windows egyik nagyon hasznos szolgltatsa a vglap. Ez az eszkz nagy segtsget jelent akkor, ha valamelyik alkalmazsbl adatot szeretnnk tadni egy msik alkalmazs dokumentuma szmra. A kvetkez plda elksztst Excelbl kezdjk. Egy egyszer tblzatot ksztsnk az egyik munkalapra. Ezt a tblzatot automatikus formzssal formzzuk meg. Ezt a tblzatot juttassuk t egy Word dokumentumba, majd a dokumentumot mentsk el egy tetszleges mappba. A Word dokumentum cme legyen azonos az elksztett munkalap nevvel s ezt formzzuk meg Cmsor 1 stlussal. A tblzat a kvetkezkppen nzzen ki:

Vglap
Ez a Windows eszkze, de mivel hasznljk az Office alklamazsok ehhez is hozzfrhetnk.

79. bra: A feladatot Excelben oldjuk meg, egy eljrs megrsval. me az eljrs:

247

Kapcsolat a felhasznlval

4. rsz

Copy
A kijellt adatot a vglapra msolja

Paste
A vglap adatt a kijellt helyre leteszi.

Sub WordbeMsol() Dim appWord As Word.Application Dim varFjlNeve As Variant Dim strLapNeve As String Const STR_OBJ_TIPUS As String = "Word.Application" Const STR_TITLE As String = "Msols a Wordbe" Const STR_PROMPT As String = "Mi legyen a Word fjl neve?" Const STR_PATH_FILE As String = "C:\" Const STR_FAJL_TIPUS As String = ".doc" strLapNeve = ActiveSheet.Name varFjlNeve = Application.InputBox(STR_PROMPT, STR_TITLE, _ strLapNeve) If varFjlNeve <> False Then varFjlNeve = STR_PATH_FILE & varFjlNeve & STR_FAJL_TIPUS Set appWord = CreateObject(STR_OBJ_TIPUS) Selection.CurrentRegion.Copy With appWord .Documents.Add With .Selection .typetext ActiveSheet.Name .paragraphs(1).Style = -2 .typeparagraph .typeparagraph .Paste End With .ActiveDocument.SaveAs Filename:=varFjlNeve .Quit End With Application.CutCopyMode = False End If End Sub

Teht a program els sorai most is a deklarcikat tartalmazzk. Itt llandk s vltozk meghatrozsra kerlt sor. Azt, hogy melyiket mire hasznljuk, majd a programsorok ismertetsekor emltjk meg.
strLapNeve = ActiveSheet.Name

A msols eltt troljuk az aktulis munkalap nevt. Erre a fjl mentsekor lesz szksgnk. Ez lesz az a nv, amit a program alaprtelmezsknt felknl a Word dokumentum mentshez. Vagyis, ha nem vltoztatunk rajta, akkor ez lesz a Word fjl neve. Azrt vlasztottuk a Variant adattpust, mert az InputBox Mgse gombjra kattinva logikai rtket

248

18. fejezet

Kapcsolat ms programokkal

kapunk vissza, mg, ha berunk egy fjl nevet, akkor szveget. Ez a vltottpus alklamaz mindt adattpus fogadsra.
varFjlNeve = Application.InputBox(STR_PROMPT, STR_TITLE, _ strLapNeve)

Az InputBox fggvny az eljrs futsa kzben megkrdezi, mi legyen az elkszlt dokumentum neve. Itt tetszleges elnevezst adhatunk meg. Alaprtelmezsknt az aktv Excel munkalap nevt knlja fel a program. Ennek az utastssornak az eredmnyeknt megjelenik egy prbeszdpanel, amiben megadhatjuk a Word fjl nevt. Ltezik egy msik InputBox fggvny is. Ez a VBE fggvnye. Most az Excel fggvnyt hasznljuk, ezrt rtuk el az Application objektum nevt. Ha az OK gombra kattintunk, akkor a szerkesztdobozba rt szveget adja vissza a fggvny, ha pedig a Mgse gombra, akkor logikai HAMIS rtk a fggvny eredmnye.
If varFjlNeve <> False Then Utastsok ... End If

Az InputBox fggvny eredmnytl fggen lpnk tovbb. Ha nem a Mgse gombra kattintott a felhasznl, akkor ltrehozzuk a Word dokumentumot, adatokat runk bele majd kilpnk az eljrsbl. Ha a Mgse gombot vlasztja a felhasznl, akkor kihagyjuk az If s End If kztti utastsokat s kilpnk az eljrsbl.
varFjlNeve = STR_PATH_FILE & varFjlNeve & STR_FAJL_TIPUS

A fjl nevt most mr teljes hosszban ltrehozzuk. Ebbe beletartozik az elrsi tvonal is s a fjl kiterjesztse is. Figyeljnk arra, hogy az eljrs elejn deklarlt llandk tartalmazzk a megfelel adatokat. Az STR_ PATH_ FILE meghatrozshoz azt az tvonal nevet kell meghatroznunk, ami a gpnkn ltezik, klnben az eljrs nem fog mkdni. A fjl tpusa minden esetben .doc legyen. Ne felejtsk ki a doc sz ell a pontot!
Set appWord = CreateObject(STR_OBJ_TIPUS)

Nevezzk el a Word alkalmazst appWord nvvel, s hozzuk ltre az objektumot a CrateObject fggvny segtsgvel.
Selection.CurrentRegion.Copy

249

Kapcsolat a felhasznlval

4. rsz

Az aktulis kijells krnyezetben tallhat adattartomnyt msoljuk a vglapra ennek a sornak a segtsgvel. Figyeljnk arra, hogy az eljrs indtsa eltt lljunk az adattartomny egyik celljra, gy az Excel felismeri az aktulis rgit.
With appWord

Ettl a sortl kezdve minden tulajdonsg el oda kell kpzelnnk az appWord objektumot, ami ponttal kezddik. Vagyis ha szeretnnk a Wordben elkezdeni egy res dokumentumot, akkor a kvetkez utastst kell kiadnunk:
.documents.Add

Ha nem rtuk volna a programba a With appWord sort akkor ezt a sort a kvetkez mdon kellett volna lernunk:
appWord.documents.Add

Ezt minden alkalommal meg kellett volna ismtelnnk amikor a Word-del vgznk mveletet. A tovbbiakban az rthetsg kedvrt a With rszben meghatrozott objektumokat dlt betvel szedjk az elemzs sorn, amint ez az elz mintban ltszik.
With appWord.Selection

Ettl a sortl kezdve a Selection el odakpzelve az appWord objektum hivatkozst minden ponttal kezdd sor el oda kell gondolnunk a appWord.Selection objektumot.
appWord.Selection.typetext ActiveSheet.Name

A ltrehozott Word dokumentumba berjuk az aktv munkalap nevt, mgpedig arra a helyre ahol a szvegkurzor ll. Mivel a dokumentum j, ezrt erre csak egy lehetsgnk van, mgpedig az els bekezds.
appWord.Selection.paragraphs(1).Style = -2

A bert szveget tartalmaz bekezdst megformzzuk Cmsor 1 stlusra. Ezt a formzst azon a bekezdsen lltjuk be, amelyikben a szvegkurzor ll. Mg mindig csak ez az egy bekezdsnk van, gy nem ronthatjuk el.
appWord.Selection.typeparagraph

250

18. fejezet
appWord.Selection.typeparagraph

Kapcsolat ms programokkal

A kvetkez kt sor ugyanazt eredmnyezi mint amikor a Word-ben egy-egy bekezds befejeztvel az ENTER billentyt letjk, vagyis j bekezdseket kezdnk a cmsor utn.
appWord.Selection.Paste

Most rkezett el annak az ideje, hogy a vglapra msolt tblzatot beszrjuk a Word dokumentumba. Ez ugyanaz a mvelet, mint amikor a htkznapi munknk sorn vgrehajtjuk a Szerkeszts (Edit) Beilleszts (Paste) utastst. Vagyis a vglap tartalma a szvegnkbe kerl, mgpedig arra a helyre, ahol a szvegkurzor ll (appWord.Selection).
End With

A tovbbiakban mr rvnyt veszti a Selection objektum. Innentl kezdve csak az appWord marad rvnyben, vagyis ha egy tulajdonsg eltt pontot tallunk, akkor ezentl az mr csak a Word alkalmazs objektumot jelenti.
appWord.activedocument.SaveAs FileName:=FjlNeve

Mentsk el a szveget! Erre hasznljuk a Word objektum SaveAs metdust. A metdusnak egyetlen paramtert adjuk meg, ami a fjl neve s elrsi tvonala. Ezt korbban troltuk a FjlNeve vltozban mg az InputBox fggvny segtsgvel.
appWord.Quit

Lezrjuk a szvegszerkesztt. Az egsz eljrs alatt nem jelent meg a szvegszerkeszt, de ez nem azt jelenti, hogy nem tltdtt be, csak a Visible tulajdonsg False rtke miatt nem ltszott. Ha szeretnnk ltni futs kzben, akkor az If... End If utastsok kztt a CreateObject fggvny mgtti helyre valahova rjuk be a kvetkez utastssort:
appWord.Visible = True

Az eljrst rjuk meg, majd futtassuk le. A megadott Word fjlt nyissuk meg s nzzk meg az eredmnyt. A tovbbi alkalmazsokkal hasonl mdszerekkel cserlhetnk adatokat. A feladatunk csak annyi, hogy meg kell ismernnk a tbbi alkalmazs objektumait. Egyszerstheti az ismerkedst, ha tlpnk a kvnt alkalmazsba s az ott felvtellel rgztett eljrsokat kiele-

251

Kapcsolat a felhasznlval

4. rsz

mezzk. A felvtel eredmnybl tvehetjk azokat a rszleteket amelyeket szksgesnek tlnk. Amikor egy alkalmazs objektumaira hivatkozunk, a kiinduls minden esetben az Application objektum. Ezt helyettesti az ltalunk hasznlt objektum elnevezs. Mi a feladatban erre hasznltuk az appWord vltozt.

sszegezve
Biztostanunk kell, hogy a kls objektumot elrjk a programbl. Ezt vagy gy rhatjk el, hogy a Visual Basic Editor Tools References prbeszd-panelben bekapcsoljuk a hasznlni kvnt objektum hivatkozst vagy a CreateObject fggvnnyel. Ha a References belltssal hoztuk ltre a kapcsolatot, akkor a New kulcsszval ltre kell hoznuk egy objektum elfordulst. A CreateObject fggvny esetn ezt megteszi maga a fggvny. Ksz dokumentumok elrshez hasznljuk a GetObject fggvnyt.

252

Trgymutat

A
Adattpusok _________________________47 Egyb _____________________________ 49 Boolean __________________________49 Date ____________________________ 49 Variant___________________________ 50 Elnevezssel _________________________50 Currency _________________________50 Double __________________________50 Integer___________________________ 50 Long ____________________________ 50 Single ___________________________ 50 String ___________________________ 50 Felhasznli _________________________64 Deklarlsa ________________________65 Numerikus __________________________47 Byte_____________________________ 48 Currency _________________________48 Double___________________________ 48 Integer ___________________________ 48 Long ____________________________ 48 Single____________________________ 48 Objektum ___________________________ 59 String _____________________________ 48 Hossza ___________________________ 48 Megadsa ______________________49 Alapfogalmak Algoritmus __________________________16 Eljrs _____________________________ 21 Esemnyek __________________________25 Gyjtemny__________________________28 Interfsz ____________________________ 23 Iterci _____________________________ 18 Metdusok __________________________25 Program ____________________________ 15 Szekvencia ___________________________ 18 Szelekci ____________________________ 18

Tulajdonsgok ________________________24 Tmbvltoz _________________________19 Vltozk ____________________________ 16 rtkads ___________________________ 16 Algoritmus __________________________16 Elgazsok __________________________95 Assistant __________________________190 Jellngyzet ________________________193 Programozsa _______________________190 Vlasztcsoport______________________196 j ballon __________________________190

B
Billenty-kombincik ________________235 Bvtmnyek ________________________230 Elksztse ________________________230 Programozottan ___________________233 Fggvny jellemzk ___________________234

C
Commandbars _______________________222 Copy ______________________________ 248 CreateObject _______________________242 Cmke _____________________________ 182

D
Dinamikus tmb ______________________56 Tmb elemei _________________________56

Trgymutat

E
Eljrs _____________________________ 21 Hatkre ___________________________ 118 Indtsa ____________________________ 161 Lpsenknt _______________________161 Ltrehozsa _________________________44 Paramteres _________________________74 Indtsa __________________________74 Statikus ____________________________ 118 Szerkesztse _________________________161 Trlse _____________________________ 161 Esemnyek ___________________________ 25 Helye______________________________ 173 Munkafzet__________________________175 Munkalap___________________________ 174 On Error __________________________181 OnKey _____________________________ 179 OnTime ____________________________ 178 Paramterei _________________________174 Visszaadott rtk _____________________177 Eszkztr __________________________217 Commandbars_______________________222 Egyedi gomb ________________________218 Programozsa _______________________222 Testreszabs _________________________218 Trlse ____________________________ 225 j ezskztr_________________________218 Programozssal ____________________223 j gomb___________________________ 220 Programozssal ____________________227 Explicit deklarls ____________________53

Fggvnyek_________________________116 Hasznlata __________________________117 Munkalapokon _____________________117

G
GetObject _________________________245 Gyjtemny __________________________28 Bvtse ____________________________ 62 Egy eleme ___________________________ 29 Elemnek eltvoltsa ___________________63 Elemnek megvltoztatsa _______________64 Ltrehozsa __________________________61 Minden eleme ________________________29 Tulajdonsgai, metdusai ________________61

H
Hatkr ____________________________ 73 Eljrs _____________________________ 73 Modul _____________________________ 80 Projekt _____________________________ 81

I
Implicit deklarci ____________________52 Interfsz ____________________________ 23 Iterci ________________________18,103

K
Kilps az eljrsbl _________________183 Konkatenci ________________________89

F
Felhasznli adattpus _________________64 Deklarlsa __________________________65 Felhasznli modul ____________________41 Betltse ___________________________ 43 Elmentse ___________________________ 42 Ltrehozsa __________________________41 Trlse _____________________________ 43 Felsorolsok _________________________68 Deklarlsa__________________________69 Elemei _____________________________ 70 Hasznlata __________________________70 Futsidej hibakezels________________181 Cmke _____________________________ 182 Hiba szma _________________________182 Kilps az eljrsbl ___________________183 On Error Go To ______________________181 Visszatrs__________________________182

L
Like ________________________________ 89 Helyettest karakterek _________________89

M
Makr panel________________________161 Makr rgzts _____________________157 Elksztse _________________________158 Indtsa ____________________________ 161 Jellemzk meghatrozsa ________________158 Rgzts vge _______________________160 Szerkesztse _________________________161 Trlse _____________________________ 161 helye ______________________________ 159

Trgymutat
Ebben a munkafzetben ______________160 Egyni makr munkafzet _____________159 j munkafzet _____________________160 indtsa ____________________________ 159 Lpsenknt _______________________161 Me________________________________ 201 Men ______________________________ 217 Commandbars_______________________222 Egyedi gomb ________________________218 Programozssal ____________________227 Programozsa _______________________222 Testreszabs _________________________218 j almen __________________________221 j menpont _______________________220 Programozssal ___________________224 Menpontok ________________________225 Trlse ____________________________ 227 MsgBox fggvny____________________188 Vlasza ____________________________ 189 Munkafzet Esemnyek __________________________175 Munkalap Esemnyek __________________________174 Mveleti jelek ________________________87 Logikai _____________________________ 93 Matematikai__________________________87 Mveletvgzs sorrendje ________________88 Szveges ___________________________ 89 Option Explicit_______________________53 Belltsa ___________________________ 53

P
Paramter ___________________________ 74 Opcionlis __________________________76 Tmbparamter _______________________77 rtkads ___________________________ 76 Paste______________________________ 248 Personal.xls ________________________159 Program ____________________________ 15 Modulris __________________________22 Struktrlt __________________________21 Programhibk ________________________53 Szemantikai __________________________53 Programozott adattads_____________244 Projekt _____________________________ 40 Jelszavas vdelme _____________________232 Prbeszdpanelek____________________199 Indtsa ___________________________ 202 Ltrehozsa _________________________199 Vezrlsek __________________________199 ComboBox _______________________207 Programbl____________________209 CommandButton __________________200 Elnevezse _______________________203 Esemnyek________________________201 Kivlasztsa ____________________204 Kombinlt lista ____________________207 ListBox __________________________212 Listapanel ________________________212 Vlasztcsoport _________________215 Parancsgomb _____________________200 TextBox _________________________206 Programozva___________________206 Tulajdonsgok ____________________200

N
New ______________________________ 240

O
Objektum vltozk ____________________59 Objektum-elforduls _________________25 Ltrehozsa __________________________61 Objektummodul ______________________40 Objektumok _________________________24 Office objektumok ___________________243 Office segd ________________________190 Jellngyzet ________________________193 Programozsa _______________________190 Vlasztcsoport______________________196 j ballon __________________________190 Opertorok _________________________87 Aritmetikai __________________________87 Logikai _____________________________ 93 Prioritsa ___________________________ 88 Szvegkezel_________________________89 Like _____________________________ 89 sszehasonlt _______________________92

Trgymutat

R
References _________________________240

S
Szekvencia___________________________ 18 Szelekci _________________________18,95 Szubrutinok _____________________74,116 Szveglland ________________________29 Szvegsszevons _____________________89

T
Testreszabs ________________________218 Eszkztr___________________________ 218 Men _____________________________ 218 Tmbvltoz _________________________19 Deklarlsa__________________________54 Dinamikus ___________________________ 56 Lsd: Dinamikus tmb Kezd eleme _________________________55 Tmbk deklarlsa ___________________54 Trlse ____________________________ 225

U
User form __________________________199 Indtsa ___________________________ 202 Me _______________________________ 201 Vezrlsek __________________________199 ComboBox _______________________207 Programbl____________________209 CommandButton __________________200 Elnevezse _______________________203 Esemnyek________________________201 Kivlasztsa ____________________204 Kombinlt lista ____________________207 ListBox __________________________212 Listapanel ________________________212 Vlasztcsoport _________________215 TextBox _________________________206 Programozva___________________206 Tulajdonsgok ____________________200

V
VBE ________________________________ 39 Figyels ablak ________________________44 Helyi ablak__________________________44

Immediate window _____________________43 Locals window _______________________44 Tulajdonsg ablak _____________________43 Watch window _______________________44 Vezrl utastsok Do... Loop _________________________110 Alkalmazsa________________________112 Elltestzetl _______________________111 Htultesztel ______________________112 For Each __________________________108 For.... Next ________________________103 Alkalmazsa _______________________104 Tbb dimenzis tmb _____________106 Vektor feldolgozsa ______________104 Mkdse ________________________104 If Then _____________________________ 95 Alkalmazsa ________________________97 Egysoros _________________________96 Tbb felttel vizsglata _______________96 Tbbsoros ________________________96 Select Case__________________________99 Alkalmazsa _______________________101 Kisebb vagy nagyobb _______________100 Tbb rt ________________________100 rtkhatr _______________________100 Visual Basic Editor ___________________39 Figyels ablak ________________________44 Helyi ablak__________________________44 Immediate window _____________________43 Locals window _______________________44 Prba ablak _________________________43 Tulajdonsg ablak _____________________43 Watch window _______________________44 Visual Basic felsorolsai _______________69 Vglap programozsa________________247 Vltozk _________________________16,47 Adattpusa __________________________47 Lsd mg: Adattpusok Deklarlsa__________________________52 Explicit ___________________________ 53 Implicit ___________________________ 52 Eljrs szint_________________________73 Elnevezse ___________________________ 51 Prefix ____________________________ 51 Szablyai __________________________51 Modul szint ________________________80 Lsd: Paramter ______________________74 Projekt szint ________________________81 Specilis ____________________________ 59 Statikus ____________________________ 83

Trgymutat

W
With... End With ____________________166 Word formzs ______________________246 Word.Application ___________________240 Word.Document _____________________244

X
XlStart mappa ______________________159

O
objektumok Elnevezse __________________________59 Esemnyek __________________________25 Metdusok __________________________25 Rendszere___________________________ 28 Tulajdonsgok ________________________24 elforduls __________________________25 jellemzi ____________________________ 24 keletkezse __________________________25

A
llandk ____________________________ 67 Deklarlsa __________________________67

E
rtkads ________________________16,85 Paramter ___________________________ 76

You might also like