Barna Róbert KE GTK Informatika Tanszék Pénzügyi feladatok VBA támogatása 7. előadás
Vezérlő utasítások Ciklusképzés Ciklusokat akkor alakítunk ki, ha egy utasításcsoportot (ciklusmagot) - valamilyen feltétel teljesülése esetén - esetleg többször meg kell ismételni. A ciklusszervező utasítások a ciklusmag utolsó utasításának végrehajtása után - a ciklusfeltételtől függően - visszavezérlik a számítógépet a ciklus első utasítására, ismétlés céljából. A VBA nyelvben a ciklusok két típusa létezik: a számlálós, illetve a feltételes ciklus. Pénzügyi feladatok VBA támogatása – 7. előadás3 / 27
Vezérlő utasítások Számlálós ciklus For kulcsszóval kell indítani. Ezek mindig elöltesztelők, de további két alesetük van. Pénzügyi feladatok VBA támogatása – 7. előadás4 / 27
Vezérlő utasítások Számlálós ciklus 1 Az első esetben konkrétan tudjuk az ismétlések számát: For cv = kezd To vég [Step lépés] Ciklusmag Next [cv] Pénzügyi feladatok VBA támogatása – 7. előadás5 / 27
Vezérlő utasítások Számlálós ciklus 1 A lépéseket számláló cv ciklusváltozó kötelezően numerikus (nem feltétlenül egész) típusú de nem lehet sem tömb, sem saját típusú változó eleme. A Step kulcsszó utáni lépés paraméter a ciklusváltozó „lépését”, változását határozza meg; ugyancsak kötelezően numerikus, és negatív is lehet. Értéke alapértelmezésben + 1, ezt nem kell megadni. Pénzügyi feladatok VBA támogatása – 7. előadás6 / 27
Vezérlő utasítások Számlálós ciklus 1 A vég paraméter a ciklusváltozó lehetséges legnagyobb, illetve legkisebb értékét szabja meg. A ciklus a következőképpen zajlik: 1. Induláskor a ciklusváltozó felveszi a kezdőértéket ( kezd ). 2. Ha a ciklusváltozó értéke pozitív lépés esetén nem nagyobb, negatív lépés esetén nem kisebb a végértéknél, (vagyis egyenlők) a ciklusmag egyszer lefut. Pénzügyi feladatok VBA támogatása – 7. előadás7 / 27
Vezérlő utasítások Számlálós ciklus 1 3. A Next kulcsszó elérésekor a VBA hozzáadja a ciklusváltozóhoz a lépés -t és megismétli az előző vizsgálatot. 4. A ciklus akkor ér véget, ha a ciklusváltozó értéke a megfelelő irányban átlépte a végértéket. Pénzügyi feladatok VBA támogatása – 7. előadás8 / 27
Vezérlő utasítások Számlálós ciklus 1 A mondottakból következik, hogy ha a lépés pozitív és a vég > kezd, illetve ha a lépés negatív és a vég < kezd feltétel nem teljesül, a ciklus egyszer sem fut le. Pénzügyi feladatok VBA támogatása – 7. előadás9 / 27
Vezérlő utasítások Számlálós ciklus 1 Ellentétben a legtöbb magasszintű nyelvvel, az ilyen ciklusok belsejében tetszőlegesen megváltoztatható a ciklusváltozó értéke; így lehet a legegyszerűbben kialakítani végtelen ciklusokat. Kerüljük az ilyen trükköket: kibogozhatatlan hibákat eredményezhetnek. Pénzügyi feladatok VBA támogatása – 7. előadás10 / 27
Vezérlő utasítások Számlálós ciklus 2 A számlálós ciklus másik esete, amikor az ismétlések számát konkrétan nem ismerjük, csak azt tudjuk, hogy egy objektumhalmaz mely elemeivel kell valamilyen műveletet végezni: For Each elem In objektumhalmaz ciklusmag Next [elem] Pénzügyi feladatok VBA támogatása – 7. előadás11 / 27
Vezérlő utasítások Számlálós ciklus 2 Az objektumhalmaz tetszőleges - kivéve felhasználói - típusú tömb is, az elem Object vagy Variant, tömbök esetében csak Variant típusú változó lehet. A ciklus annyiszor fut le, ahány elemből áll a halmaz, illetve a tömb, üres halmazra például egyszer sem. Pénzügyi feladatok VBA támogatása – 7. előadás12 / 27
Vezérlő utasítások Számlálós ciklus 2 Pontosabban az a helyzet, hogy a ciklusmagba írt feltétellel kiválaszthatjuk a halmaz feldolgozandó elemeit. Az elem változó minden lefutáskor hozzárendelődik a csoport következő kijelölt objektumához, amelyet ezután rajta keresztül vizsgálhatunk, a ciklusmagba írt utasításokkal. Pénzügyi feladatok VBA támogatása – 7. előadás13 / 27
Vezérlő utasítások Számlálós ciklus 2 For...Each cikluson belül tilos értéket adni a ciklusváltozónak! A Next kulcsszó után sosem kötelező kiírni a ciklusváltozót, de - különösen egymásba ágyazott ciklusok esetében - ajánlatos, mert ez növeli az áttekinthetőséget és megkönnyíti a hibakeresést. Pénzügyi feladatok VBA támogatása – 7. előadás14 / 27
Vezérlő utasítások Számlálós ciklus 2 Tipikus eset, amikor egy párbeszédlapon ( Form ) minden választógombot ( Optionbutton ) kikapcsolt állapotba állítunk egy makróval. A választógomb állapotát Value tulajdonságával lehet beállítani xlOff = „kikapcsolva”, xlOn = „bekapcsolva”. Pénzügyi feladatok VBA támogatása – 7. előadás15 / 27
Vezérlő utasítások Számlálós ciklus 2 Sub alaphelyzet() Dim obj As Object For Each obj In Form1 If obj.Name Like ”Optionbutton” Then obj.Value = xlOff End If Next obj End Sub Pénzügyi feladatok VBA támogatása – 7. előadás16 / 27
Vezérlő utasítások Feltételes ciklus A feltételes ciklusok közül négy Do kulcsszóval kezdődik, és aszerint különböznek, hogy elöl- vagy hátultesztelő formában írjuk-e meg, illetve hogy a ciklusmagot a feltétel teljesülése ( While ) vagy nem teljesülése ( Until ) esetén kívánjuk-e megismételni. A ciklus végét mindegyik esetben Loop kulcsszó jelzi. Egy további, ötödik eset az elöltesztelő, teljesülő feltétel mellett lefutó While ciklus, amely a Wend kulcsszóval ér véget. Pénzügyi feladatok VBA támogatása – 7. előadás17 / 27
Vezérlő utasítások Feltételes ciklus 1 Do While feltétel ciklusmag Loop Elöltesztelő. Addig fut amíg a feltétel teljesül. Pénzügyi feladatok VBA támogatása – 7. előadás18 / 27
Vezérlő utasítások Feltételes ciklus 2 Do Until feltétel ciklusmag Loop Elöltesztelő. Addig fut amíg a feltétel nem teljesül. Pénzügyi feladatok VBA támogatása – 7. előadás19 / 27
Vezérlő utasítások Feltételes ciklus 3 While feltétel ciklusmag Wend Addig fut amíg a feltétel teljesül (csak írásmódban más mint az első). Elöltesztelő. Pénzügyi feladatok VBA támogatása – 7. előadás20 / 27
Vezérlő utasítások Feltételes ciklus 4 Do ciklusmag Loop While feltétel Addig fut amíg a feltétel teljesül. Hátultesztelő. Pénzügyi feladatok VBA támogatása – 7. előadás21 / 27
Vezérlő utasítások Feltételes ciklus 5 Do ciklusmag Loop Until feltétel Addig fut amíg a feltétel nem teljesül. Hátultesztelő. Pénzügyi feladatok VBA támogatása – 7. előadás22 / 27
Vezérlő utasítások Feltételes ciklus A hátultesztelő ciklusok legalább egyszer lefutnak. A feltétel mind az öt esetben tetszőleges, érvényes logikai kifejezés lehet. Pénzügyi feladatok VBA támogatása – 7. előadás23 / 27
Vezérlő utasítások Feltételes ciklus A While - Wend típus kivételével, elvileg megengedett bármelyik ciklus belsejébe egy címkére beugrani a ciklusfej megkerülésével is. Ehhez ugró utasítást kellene használni (később), a strukturált programozásban azonban ez (megjósolhatatlan következményeik miatt) tilos! Pénzügyi feladatok VBA támogatása – 7. előadás24 / 27
Vezérlő utasítások Feltételes ciklus A While - Wend típus kivételével bármelyik ciklus megszakítható a végrehajtás bármely pontján, típusától függően - az Exit For, illetve az Exit Do utasítással, amely rendszerint valamilyen feltételhez kötődik: If feltétel Then Exit {For|Do} Pénzügyi feladatok VBA támogatása – 7. előadás25 /27
Vezérlő utasítások Feltételes ciklus Egymásba ágyazott ciklusok megszakítása esetén a vezérlés az eggyel magasabb szintű ciklusba kerül, a megszakított ciklus Next, illetve Loop utasítását követő sorra. A ciklusok - típustól függetlenül - tetszőleges mélységben egymásba ágyazhatók. Pénzügyi feladatok VBA támogatása – 7. előadás26 /27
Köszönöm a figyelmet! Folyt köv. Pénzügyi feladatok VBA támogatása – 7. előadás27 / 27