78
SZÉCHENYI ISTVÁN EGYETEM EXCEL PROGRAMOZÁS Oktatási segédlet  Pusztai Pál 2014

Excel Prog

Embed Size (px)

DESCRIPTION

excel VBA :)

Citation preview

  • SZCHENYI ISTVN EGYETEM

    EXCEL PROGRAMOZS

    Oktatsi segdlet

    Pusztai Pl 2014

  • I

    Tartalomjegyzk 1. Bevezets .................................................................................................................................................................... 3

    2. A Visual Basic programozsi nyelv ........................................................................................................................ 4

    2.1. Egyszer adattpusok ........................................................................................................................................ 4

    2.1.1. Egsz adattpusok ...................................................................................................................................... 4

    2.1.2. Vals adattpusok ....................................................................................................................................... 6

    2.1.3. Logikai adattpus ........................................................................................................................................ 6

    2.1.4. Szveges adattpus ..................................................................................................................................... 6

    2.1.5. Egyb adattpusok ..................................................................................................................................... 7

    2.2. Adatok kezelse ................................................................................................................................................. 8

    2.2.1. Vltoz ........................................................................................................................................................ 8

    2.2.2. Kifejezs ....................................................................................................................................................10

    2.2.3. Fggvnyek ...............................................................................................................................................11

    2.2.4. Az rtkad utasts .................................................................................................................................13

    2.2.5. Adatok bekrse .......................................................................................................................................14

    2.2.6. Adatok kirsa ...........................................................................................................................................15

    2.3. Vezrlszerkezetek ..........................................................................................................................................17

    2.3.1. Szekvencia .................................................................................................................................................17

    2.3.2. Szelekci ....................................................................................................................................................18

    2.3.3. Iterci .......................................................................................................................................................19

    2.4. Szubrutinok ......................................................................................................................................................21

    2.4.1. Deklarci s hvs ..................................................................................................................................21

    2.4.2. Mintafeladat ..............................................................................................................................................23

    2.5. sszetett adattpusok ......................................................................................................................................25

    2.5.1. Tmbk .....................................................................................................................................................25

    2.5.2. Rekordok ...................................................................................................................................................27

    2.5.3. Mintafeladat ..............................................................................................................................................28

    2.6. Objektumok, objektumtpusok .....................................................................................................................31

    3. Az Excel VBA hasznlata ......................................................................................................................................32

    3.1. Makrk ..............................................................................................................................................................32

    3.2. A Visual Basic Editor ......................................................................................................................................34

    3.2.1. Az Immediate ablak .................................................................................................................................37

    3.2.2. A Project ablak .........................................................................................................................................37

    3.2.3. A Properties ablak ...................................................................................................................................39

    3.2.4. A kdszerkeszt ablak ............................................................................................................................40

    3.2.5. Modulok felptse ..................................................................................................................................44

    3.2.6. Fordts, futtats, hibakeress ................................................................................................................45

    3.2.7. Vizulis formtervezs ..............................................................................................................................48

    3.2.8. Mintafeladat ..............................................................................................................................................50

  • II

    4. Az Excel programozsa..........................................................................................................................................55

    4.1. A hasznlhat objektumok, objektumtpusok ............................................................................................55

    4.1.1. Az Application objektum .......................................................................................................................55

    4.1.2. Gyjtemnyek...........................................................................................................................................55

    4.1.3. A Range objektum ...................................................................................................................................56

    4.1.4. A WorksheetFunction objektum ...........................................................................................................61

    4.2. Egyb VBA lehetsgek .................................................................................................................................63

    4.2.1. Makrk rgztse......................................................................................................................................63

    4.2.2. Diagramok kezelse .................................................................................................................................64

    4.2.3. A beptett prbeszdablakok hasznlata .............................................................................................65

    4.2.4. Sajt men ksztse ................................................................................................................................66

    4.3. Mintafeladat ......................................................................................................................................................68

    5. Irodalomjegyzk ......................................................................................................................................................77

  • 3

    1. BEVEZETS

    Jelen dokumentum elssorban az Excel programozs irnt (kedvtelsbl vagy egyb okbl) rdekld

    kezdknek kszlt, akik most teszik meg els lpseiket egy olyan ton, amelynek sorn, ill. vgn megvalsul az ember s szmtgp kommunikcijnak legmlyebb, legnehezebben elsajtthat, de egyben legintellektulisabb szintje, a szmtgp programozsa.

    Ha egy feladat megoldsra szmtgpes programot ksztnk, akkor azt ltalban nem gy tesszk, hogy elkezdjk begpelni a program utastsait. Minl nagyobb, sszetettebb a megoldand feladat, annl inkbb szksges a kvetkez megoldsi lpsek vgrehajtsa:

    1. A feladat megfogalmazsa, pontosts, ltalnosts.

    2. Matematikai (vagy egyb) modell kivlasztsa, megadsa (ha szksges, illetve lehetsges).

    3. Az adatszerkezet definilsa, az input-output specifiklsa.

    4. A megoldst megvalst algoritmus megtervezse, elksztse.

    5. Programrs, kdols (az adatszerkezet s az algoritmus alapjn).

    6. Tesztels, hibakeress.

    7. Dokumentls (felhasznlknak, fejlesztknek).

    Termszetesen az adott feladat (vagy munka) jellegbl addan bizonyos lpsek el is maradhatnak (pl. 2., 7.), illetve javts, mdosts esetn szksg lehet egy korbbi szintre val visszalpsre is. A program tnyleges megrsa (5.) csak a mr elksztett megold algoritmus (4.) ismeretben lehetsges, ami viszont nem kszlhet el anlkl, hogy tisztznnk, milyen bemen s milyen eredmny adataink lesznek (3.).

    Az Excel programozsi segdletnket a programrshoz (5.) szksges (rvidtett) nyelvi ismertetvel kezdjk (lsd 2. fejezet), amit a programok kiprblshoz (6.) szksges ismeretek kvetnek (lsd 3. fejezet). A harmadik rszben (lsd 4. fejezet) az Excel objektumairl, azok programbl trtn hasznlatrl lesz sz. Mivel a segdlet bevezet jelleg, ezrt a feldolgozott tmakrnek csak egy kisebb (de remnyeink szerint a lnyeges dolgokat tartalmaz) szelett mutatjuk be.

    A szakirodalom szerencsre bsgesen ellt minket programozsrl szl szakknyvekkel. Az Excel programozs utn rdekld olvasknak az [1], a Visual Basic nyelvvel kapcsolatosan a [2], az algoritmusok tervezst illeten kezdszinten a [3], haladbb szinten a [4] szakirodalmat ajnljuk.

  • 4

    2. A VISUAL BASIC PROGRAMOZSI NYELV

    A BASIC (Beginners All-purpose Symbolic Instruction Code) programnyelvet oktatsi clokra hoztk ltre 1964-ben (Dartmouth College USA, Kemny Jnos s Thomas Kurtz). Az ltalnos cl felhasznlhatsg s a knny tanulhatsg elsdleges szempont volt, ez a mozaiksz szavaibl is kiderl.

    A BASIC programozsi nyelv magas szint, az emberi gondolkodshoz, jellsrendszerhez kzel ll programozsi nyelv. A BASIC nyelven megrt programokat (az n. forrsprogramokat) a szmtgp nem tudja egybl vgrehajtani. Ezek vgrehajtshoz fordts (compile) vagy rtelmezs (interpretation) szksges. A fordtprogramok a teljes forrsprogramot lefordtjk a szmtgp ltal mr vgrehajthat utastsokk, mg az rtelmezk utastsonknt rtelmezik s hajtjk vgre a forrsprogramot.

    A nyelvnek tbbfle vltozata ltezett, kezdve az iskola-szmtgpek beptett BASIC rtelmezjtl, a 80-as vekben elterjedt szemlyi szmtgpek Qbasic-jn keresztl, az 1991-ben megjelent Microsoft Visual Basic (rviden VB) nyelvig. A Visual Basic for Applications (rviden VBA) az MS Office szoftverek makrnyelve, a Visual Basic Script a Windows opercis rendszer scriptnyelve, a 2002-ben megjelent Visual Basic .NET pedig a .NET keretrendszer programozsi nyelve.

    A Visual Basic nyelv utn ejtsnk pr szt a nyelvet hasznl szoftverfejleszt rendszerekrl is.

    Az MS Visual Studio egy ltalnos cl szoftverfejleszt keretrendszer, amelyben tbbfle (pl. Visual Basic, C#) programnyelven is fejleszthetnk.

    Az MS Visual Basic for Applications (pl. az ltalunk hasznlt Excel VBA) fbb tulajdonsgai:

    Csak Visual Basic nyelven programozhatunk, (a Visual Studio-hoz kpest) korltozott fejlesztsi eszkztr mellett.

    Csak az adott szoftverrel (pl. Excel) egytt hasznlhat.

    nllan futtathat (*.exe) fjlok nem kszthetk.

    Az adott szoftverhez igazod, kszen kapott objektumrendszert tartalmaz.

    Az egyes utastsoknl megadjuk az utastsok (esetleg egyszerstett) szintaktikjt. Az egyszerstssel a lnyeges dolgok kiemelse a clunk, az utastsok teljes szintaktikja a sgban megtallhat.

    Megjegyzs

    A dokumentumban az MS Excel 2010 VBA segtsgvel szemlltetnk, a lersok is ehhez igazodnak, de a 2003-es Excel VBA krnyezete ugyangy alkalmas a tanulsra, a feladatok megoldsra.

    Az utastsok szintaktikjban a szgletes zrjelben lv rszek elhagyhatk, a kapcsos zrjelek kztt, fggleges vonallal elvlasztva vlasztsi lehetsgek felsorolsa tallhat, a hrom pont a tetszleges szm ismtls jellsre szolgl.

    2.1. Egyszer adattpusok Minden programozsi nyelv (gy a VB is) meghatrozza az adatok azon krt, amelyet kezelni tud. Azt, hogy milyen fajta adatokat hasznlhatunk, ezekkel milyen mveleteket vgezhetnk, ezek hogyan troldnak, az adattpusok definiljk. Attl fggen, hogy az adattpus egy vagy tbb logikailag sszetartoz adat hasznlatt engedi meg, megklnbztetnk egyszer s sszetett adattpusokat. Az egyszer adattpusokrl ebben a fejezetben, az sszetett adattpusokrl a 2.5. fejezetben lesz sz.

    2.1.1. Egsz adattpusok

    Az egsz szmok hasznlatt tbbfle egsz tpus biztostja, amelyek az adatok trolsra felhasznlt memriaterlet mretben, az eljel kezelsben, gy az egyes tpusokhoz tartoz egsz szmok tartomnyban klnbznek.

  • 5

    Adattpus Trolsi mret Tartomny

    Byte 1 bjt 0 .. 255

    Integer 2 bjt 32768 .. 32767

    Long 4 bjt 2147483648 .. 2147483647

    2.1. tblzat. Az egsz adattpusok

    Mg a Byte tpus 1 bjtja csupn 28=256 db, addig a Long tpus 4 bjtja mr 232 (kb. 4 millird) klnbz rtk (egsz szm) trolst biztostja.

    Az egsz tpus adatokkal a matematikban szoksos mveletek vgezhetk el, amelyet a 2.2. s 2.3. tblzatok szemlltetnek. Az aritmetikai mveletek tblzatbeli sorrendje a mveletek ersorrendjt (priorits, precedencia) tkrzi, ahol legell a legersebb (legmagasabb priorits) hatvnyozs tallhat.

    A hasonltsok kztt nincs ersorrendbeli klnbsg (azonos prioritsak), de prioritsuk gyengbb, mint az aritmetikai mveletek. A hasonltsi mveletek nemcsak egsz szmokra, de ms adatokra (pl. vals szmok, sztringek, stb.) is rtelmezettek, eredmnyk logikai tpus. A logikai adattpusrl a 2.1.3. fejezetben, mg a kifejezsek kirtkelsnek szablyairl a 2.2.2. fejezetben lesz sz.

    Aritmetikai mveletek

    Hatvnyozs (^)

    Negci ()

    Szorzs (*), oszts (/)

    Egsz oszts hnyadosa (\)

    Egsz oszts maradka (Mod)

    sszeads (+), kivons ()

    2.2. tblzat. Az egsz adattpusok aritmetikai mveletei

    Hasonltsok

    Egyenl (=)

    Nem egyenl ()

    Kisebb ()

    Kisebb vagy egyenl (=)

    2.3. tblzat. A hasonltsi mveletek

    Pl. 3^2 9 3/2 1.5 5\3 1 5 Mod 3 = 2 True

    Megjegyzs

    A kisebb vagy egyenl (=) mveletek (ahogyan azt a nevk is sugallja) csak akkor igazak, ha a kisebb () vagy egyenl (=) mveletek legalbb egyike igaz.

    A mveleteket opertoroknak, a mveletekben rsztvev adatokat operandusoknak, a hasonltsokat pedig relcis mveleteknek (vagy egyszeren csak relciknak) is nevezik.

  • 6

    2.1.2. Vals adattpusok

    A vals szmok esetn ktfle tpust hasznlhatunk, amelyek jellemzit a 2.4. tblzat szemllteti. Noha a hasznlhat szmok nagysgrendje kb. 1038, a trolsra hasznlt 4, illetve 8 bjt csak kb. 7-8, illetve 15-16 rtkes (decimlis) szmjegyet biztost (a tbbi szmjegy a kerekts miatt 0 lesz).

    Adattpus Trolsi mret rtkes jegyek

    Single 4 bjt 7-8

    Double 8 bjt 15-16

    2.4. tblzat. A vals adattpusok

    A vals adattpusok mveletei az egsz oszts (\, Mod) mveletek kivtelvel megegyeznek az egsz adattpusok mveleteivel.

    Pl. 4^0.5 0.5

    2.1.3. Logikai adattpus

    A logikai (Boolean) adattpusban ktfle rtk ltezik, az igaz (True) s a hamis (False). A hrom legfontosabb logikai mvelet a tagads (Not), az s (And), s a vagy (Or), amelyek igazsgtblzatt a 2.5. tblzat szemllteti. A logikai rtkekre rtelmezettek a hasonlts mveletek (lsd 2.3. tblzat) is.

    A B Not A A And B A Or B

    True True False True True

    True False False False True

    False True True False True

    False False True False False

    2.5. tblzat. Logikai mveletek

    A tagads egyoperandus mvelet az ellenkezjre vltoztatja a logikai rtket (igazbl hamis lesz s fordtva), az s ktoperandus mvelettel sszekapcsolt logikai kifejezs csak akkor lesz igaz, ha mindkt operandus igaz, mg a vagy ktoperandus mvelettel sszekapcsolt logikai kifejezs csak akkor lesz hamis, ha mindkt operandus hamis.

    Megjegyzs

    Logikai mvelet mg a kizr vagy (Xor), az ekvivalencia (Eqv), s az implikci (Imp) is.

    A logikai rtkek kztt is rtelmezett a sorrendisg (br ezt ritkn hasznljuk), nevezetesen a False rtk megelzi a True rtket, azaz False < True True, gy a logikai rtkekre definilt az sszes hasonltsi mvelet.

    2.1.4. Szveges adattpus

    A szveges (String) adattpus szveges adatok (karaktersorozatok) hasznlatt biztostja. A String kulcssz vltoz hossz sztringeket deklarl, amelyek a maximlis adathosszig (2^31 darab karakter) tetszleges hosszak lehetnek. A sztringeket macskakrmk kz kell tenni. Az res sztringnek ("") nincs egyetlen karaktere sem.

    A sztringekre az sszefzs mvelet (ms nven konkatenci) (+, &), s a hasonltsok (lsd 2.2. tblzat) rtelmezettek. A + mvelet csak szvegeket fz ssze, az & szmokat is kpes sszefzni, amelyeket a mvelet elvgzse eltt sztringg alakt (konvertl).

    Pl. "alma" + "fa" "almafa" 3 & 3 * 5 "315"

  • 7

    A hasonltsi mveletek kirtkelse a sztringek karakterei alapjn trtnik. Kt sztring egyenl (=), ha egyforma hosszak s karaktereik rendre megegyeznek, egybknt nem egyenlk (). A kisebb () hasonltsi mveleteknl a sztringek els klnbz karakterprja hatrozza meg az eredmnyt (lsd megjegyzs). Ha nincs ilyen karakter (az egyik sztring kezdszelete a msiknak), akkor a rvidebb sztring lesz a kisebb.

    Pl. "Alma" < "alma" True

    "Kovcs" < "Kovcsn" True

    "Kovacs" < "Kovcs" True

    Megjegyzs

    A sztringek sszehasonltsra az Option Compare (modulszint) utasts is hatssal van. o Az Option Compare Binary (alaprtelmezett) esetben a karakterek (Windows

    kdlapbeli) kdjai alapjn trtnik a hasonlts (A < B < E < Z < a < b < e < z < < < < < < ).

    o Az Option Compare Text utasts olyan sszehasonltst eredmnyez, amely nem klnbzteti meg a kis- s nagybetket (case insensitive) ((A=a) < (=) < (B=b) < (E=e) < (=) < (Z=z) < (=)).

    Lehetsg van fix hossz sztringek hasznlatra is. Ekkor a String kulcssz utn (egy csillag karakterrel elvlasztva) megadand a sztringek hossza is (pl. String * 30). Egy ilyen tpus vltozban trolt sztring hossza fixen a tpusban rgztett hossz lesz (a pldban 30), a hosszabb sztringek jobbrl csonkulnak, a rvidebbek pedig szkzkkel egszlnek ki. (A vltozkrl a 2.2.1. fejezetben lesz sz, a fix hossz sztringek hasznlatrl egy pldt a 2.5.2. s 2.5.3. fejezetekben lthatunk.) Bizonyos esetekben (pl. vletlenelrs adatfjloknl) csak ez a sztringtpus hasznlhat. A maximlis adathossz 2^16 darab karakter.

    A sztringek minta alapjn trtn hasonltsra a Like mvelet hasznlhat.

    2.1.5. Egyb adattpusok

    A dtum/id (Date) adattpus segtsgvel dtum s/vagy idadatokat tudunk kezelni. Egy (8 bjton trolt) vals szm egsz rsze a dtum, trt rsze pedig az idpont megadsra hasznlatos. Az idkezels megegyezik az Excel idkezelsvel, a dtumkezels kicsit eltr. Az Excel csak pozitv szmokat tud dtumknt rtelmezni, a VB negatv szmokat is kezel, amellyel a dtum 100.01.01-tl 9999.12.31-ig terjed rtk lehet.

    Pl. Excel: 1.25 ~ 1900.01.01 6:00:00, VB: 1.25 ~ 1899.12.31 6:00:00, 1.5 ~ 1899.12.29 12:00:00

    A Currency adattpus a pnzgyi szmtsokhoz ajnlott. Egy ilyen tpus adat fixen ngy tizedes jegyet tartalmaz, mert az adat tzezerszerese troldik egsz szmknt (8 bjton, ami 19-20 rtkes decimlis jegy pontossgot jelent).

    A Variant adattpust akkor hasznljuk, ha egy adatnak nem tudjuk elre a tpust, vagy egy vltozban klnbz tpus adatokat (pl. szm, szveg) szeretnnk trolni. A vltozkrl a 2.2.1. fejezetben lesz sz. A knyelmes hasznlat ra a nagyobb memriaterlet (szm esetn 16 bjt, szveg esetn 22 + a szveg karaktereinek szmval megegyez bjt).

    Megjegyzs: A Variant tpus vltozk specilis rtkeket (Empty, Error, Nothing, Null) is tartalmazhatnak.

    A VBA elszeretettel hasznlja a felsorolt (Enum) tpust akkor, amikor az adatoknak csak nhny

    lehetsges rtke van. Az Enum tpus adatok mindegyikhez egy azonost s egy egsz szm rendelhet. A forrsprogramokban ugyan mindkett hasznlhat, de clszer az azonostk hasznlata, gy a forrskd kifejezbb, rthetbb lesz.

  • 8

    Szintaktika:

    [Private|Public] Enum name

    membername[=constantexpression]

    membername[=constantexpression]

    ...

    End Enum

    Private A tpus csak abban a modulban hivatkozhat, amelyikben deklarltuk.

    Public A tpus minden modulbl hivatkozhat (ez az alaprtelmezs).

    name A tpus azonostja.

    membername A tpushoz tartoz elem azonostja.

    constantexpression A tpushoz tartoz elem rtke.

    Az egyes elemek szmrtkeit megad kifejezsek (constantexpression) konstansokbl ll, egsz rtk kifejezsek lehetnek. Ezek a kifejezsek elhagyhatk, ekkor az els elem esetn 0, a tbbinl az elz rtknl eggyel nagyobb rtk definildik.

    Pl.

    Enum SecurityLevel

    IllegalEntry = -1

    SecurityLevel1 = 0

    SecurityLevel2 = 1

    End Enum

    Megjegyzs

    Az Enum s End Enum utastsok kztti rsz (pldban szerepl) beljebb tagolsa csak az ttekinthetsget segti.

    Az Enum utasts modulszint utasts, azaz a modulok elejn helyezend el. A modulok felptsrl a 3.2.5. fejezetben lesz sz.

    Az egyes utastsok szintaktikjt a VBA fejlesztkrnyezet sgja alapjn adjuk meg.

    2.2. Adatok kezelse Ahhoz, hogy adatainkat a szmtgp kezelni tudja, trolnia is kell. A trols mikntje, konkrt megvalstsa egyrszt az adatok tpustl, msrszt az alkalmazott fejlesztkrnyezettl, s az opercis rendszertl is fgg.

    Adatainkat alapveten a szmtgp memrijban troljuk, de szksg esetn kls adathordozn (adatfjlokban) is eltrolhatjuk. A fjlokban trtn adattrolsra akkor van szksg, ha adatainkat kt programfuts kztt is meg szeretnnk rizni. A memriban trtn adattrolsrl ebben a fejezetben, az Excel-fjlokban (munkafzetekben) trtn adattrolsrl a 4.1. fejezeteben lesz sz.

    2.2.1. Vltoz

    Vltozn olyan azonostval elltott memriaterletet rtnk, ahol a vltoz tpusnak megfelel rtket (pl. adatot, rszeredmnyt) trolhatunk. Egy vltozban trolt rtk a program vgrehajtsa sorn megvltozhat innen ered az elnevezse , ilyenkor a vltozba kerl j rtk fellrja a rgit.

    A vltozk hasznlatt ltalban megelzi azok deklarlsa, amikor is megadjuk a vltoz tpust. A legtbb programozsi nyelvben (pl. C, Pascal) ktelez a vltozk deklarlsa, de a Visual Basic megengedi a vltozk deklarci nlkli hasznlatt is. A deklarlatlan vltozk tpusa Variant lesz.

    Mindazonltal a deklarlatlan vltozk (a knyelmes hasznlat mellett) lehetsges hibaforrsok is egyben (pl. egy vltoz azonostjnak elgpelsbl add hiba csak futsidben derl ki), ezrt a VB kln utastst biztost arra, hogy a vltozkat deklarlni kelljen. Az Option Explicit (modulszint) utasts

  • 9

    kiknyszerti a vltozk deklarlst azltal, hogy szintaktikai (formai) hibt kapunk egy nem deklarlt vltoz hasznlatakor (lsd 3.2.6. fejezet).

    A vltozk deklarlsnak (egyszerstett) szintaktikja:

    Dim varname [As type] [,...]

    varname A vltoz (betvel kezdd) azonostja (neve).

    type A vltoz tpusa (ha hinyzik, a vltoz Variant tpus lesz).

    Pl.

    Dim i As Integer 'Egy Integer tpus vltoz deklarlsa

    Dim v 'Egy Variant tpus vltoz

    Dim a,b As Single 'Egy Variant s egy Single tpus vltoz

    Megjegyzs

    A pldban szerepl sorok vgn magyarz megjegyzsek tallhatk, amelyeket a Visual Basic Editor (lsd 3.2.4. fejezet) alaprtelmezetten zld sznnel emel ki.

    Egy vltoz azonostjnak (mint minden ms programbeli azonostnak) be kell tartaniuk a VB nvmegadsi szablyait (naming rules). Ezek tbbek kztt elrjk, hogy betvel kell kezddnie, nem haladhatja meg a 255 karaktert, nem tartalmazhat specilis karaktereket (pl. ., !, @, &, $, #), stb. Clszer olyan beszdes (azaz a vltoz szerepre, a benne trolt adatra/adatokra utal), rvid, alfanumerikus karaktersorozatot hasznlni, amelyeknek nincs ms jelentsk a VB-ben.

    Az azonostkban magyar kezetes bet s az alulvons karakter (_) is hasznlhat (pl. v_H_Nap), de a kis s nagybetk kztt nincs klnbsg. Egy vltoz azonostja a

    deklarlskor megadott formban jelenik meg hivatkozskor (pl. ha i-t deklarltunk, akkor az I-vel val hivatkozs i-re cserldik a kdszerkeszt ablakban).

    Noha a deklarlt vltozknak a VB ad kezdrtket (a numerikus vltozk 0, a logikai vltozk False, mg a String tpus vltozk res sztring kezdrtket kapnak), lehetleg csak olyan vltozk rtkeit hasznljuk fel, amelyeknek korbban mr definiltuk az rtkt!

    Tpusdeklarcis karakterek

    A VB nyelv (hasonlan, mint a korbbi BASIC nyelvek) megengedi azt, hogy a nem deklarlt vltozk tpust tpusdeklarcis karakterrel jelezzk. Ezek hasznlatnak jelentsge cskkent, hiszen a VB-ben kiknyszerthetjk a vltozk deklarlst, amikor is explicit mdon meg kell adnunk a vltoz tpust.

    A hasznlhat karakterek s a hozzjuk tartoz adattpusok:

    % Integer, ! Single, # Double, $ String, @ Currency

    Megjegyzs

    Az els rtkadsnl megadott tpusdeklarcis karakter ksbb el is hagyhat.

    A vltozk tpusa a Deftype utastsokkal (pl. DefInt, DefStr, ) is szablyozhat.

    Pl.

    i% = 2.8 'Az i vltozba 3 kerl (kerekts)

    c@ = 123456789012# 'A c vltozba egy Double konstanst tesznk

    st$ = 2 'Az st vltozba "2" kerl

    st = st + st 'Az st vltozba "22" kerl

    Megjegyzs: A fenti pldk az rtkad utastst hasznljk, amirl rszletesen a 2.2.4. fejezetben lesz sz.

  • 10

    2.2.2. Kifejezs

    Kifejezsen olyan szmtsi mveletsort rtnk, amellyel megmondjuk, hogy milyen adatokkal, milyen mveleteket, milyen sorrendben kvnunk elvgezni. A kifejezs kirtkelsekor egy j rtk a kifejezs rtke keletkezik.

    A kifejezsben szerepelhetnek:

    Konstansok, vltozk, fggvnyhvsok

    Mveletek

    Zrjelek

    Pl. (-b+Sqr(b*b-4*a*c))/(2*a)

    A pldban a 4 s 2 konstansok, az a, b, c vltozk, az Sqr a ngyzetgyk fggvny.

    A mveletek prioritsa cskken ersorrendben:

    Aritmetikai o Hatvnyozs (^) o Negci () o Szorzs, oszts (*, /) o Egsz oszts hnyadosa, maradka (\, Mod) o sszeads, kivons (+, )

    Szveg sszefzs (&, +)

    Hasonltsok (=, , , =, Like, Is)

    Logikai (Not, And, Or, Xor, Eqv, Imp)

    Az egyes hasonltsok azonos prioritsak, az egsz oszts mveleteit s a logikai mveleteket cskken priorits szerinti sorrendben adtuk meg.

    A kifejezsek kirtkelsnek szablyai:

    A zrjelbe tett kifejezsek s fggvnyhvsok operandus szintre emelkednek.

    A magasabb priorits mveletek vgrehajtsa megelzi az alacsonyabb priorits mveletek vgrehajtst.

    Az azonos priorits mveleteknl a balrl-jobbra szably rvnyes, ami azt jelenti, hogy ezen mveletek vgrehajtsa balrl jobbra haladva trtnik.

    Megjegyzs

    Ha szksges, akkor a tpuskonverzik automatikusan vgrehajtdnak.

    Az Is mvelettel objektumhivatkozsok egyezse vizsglhat.

    Pl.

    3 * 4

  • 11

    2.2.3. Fggvnyek

    A programozsi nyelvek beptett fggvnyekkel segtik a szmolst, adatfeldolgozst. Ezeket csak hasznlnunk kell, azaz a megfelel paramterekkel meg kell hvnunk ket. Az albbiakban (csoportokba foglalva) felsorolunk nhny gyakran hasznlatos fggvnyt (de hangslyozzuk, hogy ez a felsorols korntsem teljes, a VB-ben sokkal tbb fggvnyt hasznlhatunk).

    Matematikai fggvnyek

    Abs(X) X abszolt rtke.

    Exp(X) Az exponencilis fggvny (ex) rtke az X helyen.

    Log(X) A termszetes alap logaritmus fggvny rtke az X helyen.

    Sin(X) X szinusza (X radinban adott).

    Cos(X) X koszinusza (X radinban adott).

    Sqr(X) X ngyzetgyke.

    Int(X) A legnagyobb egsz szm, amely mg nem nagyobb, mint X.

    Rnd() Egy vletlen szm a [0, 1) intervallumbl.

    Pl.

    Int(3.8) 3 Int(3.8) 4

    Egy vletlen egsz szm az [a,b] intervallumbl: Int((b-a+1)*Rnd)+a

    Megjegyzs: A paramterek nlkli fggvnyeknl az res zrjelpr elhagyhat (mint a pldban az Rnd esetn).

    Konverzis fggvnyek

    Asc(X) Az X karakter ASCII kdja.

    Chr(X) Az X ASCII kd karakter.

    Str(X) Az X numerikus adat szvegknt.

    Val(X) Az X szmot tartalmaz szveg numerikus rtke.

    Pl.

    Asc("A")65 Chr(65) "A" Str(2.3)" 2.3" Val("2.3") 2.3

    Adott tpus rtkk konvertl fggvnyek

    CStr(X) X rtkt String rtkk.

    CInt(X) X rtkt Integer rtkk.

    CSng(X) X rtkt Single rtkk.

    CDate(X) Az X rvnyes dtumkifejezst Date rtkk.

    Pl.

    CStr(2.6) "2,6" CInt(2.6) 3 CSng("2,6") 2.6

    Megjegyzs

    Ezekbl a konvertl fggvnyekbl csak nhnyat ragadtunk ki, de minden egyszer adattpushoz ltezik ilyen fggvny.

    A kkkel kiemelt fggvnynevek (csakgy, mint a tbbi, kk sznnel kiemelt sz) kulcsszavak, nem hasznlhatk msra (pl. egy vltoz azonostjnak).

    Az talaktand X rtk tetszleges tpus rtk lehet (pl. szm, szveg, logikai rtk).

    A CStr fggvny az opercis rendszerbeli tizedesjelet hasznlja (a plda azt az esetet szemllteti, amikor a belltott tizedesjel a vessz).

  • 12

    Ha szmot tartalmaz szveges adatot konvertlunk numerikus adatt, akkor tizedesjelknt a vessz s az opercis rendszerben belltott tizedesjel hasznlhat. Ha pl. vessz az opercis rendszerben belltott tizedesjel, akkor a pont hasznlata esetn tpuskeveredsi hibt kapunk (pl. CInt("2.6")).

    Ha az X rtk nem konvertlhat az eredmnytpus rtkkszletbe, akkor hibt kapunk (pl. CByte(-1)).

    Szvegkezel fggvnyek

    Len(X) Az X sztring hossza (karaktereinek szma).

    Left(X,Y) Az X sztring elejrl Y darab karakter.

    Right(X,Y) Az X sztring vgrl Y darab karakter.

    Mid(X,Y[,Z]) Az X sztring Y-adik karaktertl Z darab karakter.

    Trim(X) Az X sztring vezet s zr szkzeinek levgsa.

    InStr([X,]Y,Z) A Z sztring megkeresse az Y sztringben (az X-edik karaktertl kezdden).

    Pl.

    Len("Alma") 4 Left("Alma",2) "Al" Right("Alma",2) "ma"

    Mid("Alma",3,1) "m" Mid("Alma",3) "ma" Trim(" a b ") "a b"

    InStr("alma","a") l InStr(2,"alma","a") 4 InStr("alma","A") 0

    Megjegyzs

    Vezet szkzk levgsa: LTrim, zr szkzk levgsa: RTrim.

    Ha a Mid fggvny Z paramtert nem adjuk meg, vagy megadjuk, de nincs annyi darab karakter az Y-adik karaktertl kezdden, akkor az eredmny az X sztring utols karakterig tart.

    Az InStr fggvny X paramtere elhagyhat, ekkor a keress az Y sztring els karaktertl indul.

    Ltezik Mid utasts is, amellyel egy sztring karakterei ms karakterekre cserlhetk.

    Dtum- s idkezel fggvnyek

    Date Az aktulis (opercis rendszerbeli) dtum.

    Time Az aktulis (opercis rendszerbeli) id.

    Megjegyzs: A dtumok hasonlan kezelhetk, mint az Excel-ben (pl. a Date1 kifejezs a tegnapi dtumot adja).

    Adatformz fggvny

    Format(X[,Y]) Az X kifejezs sztringg alaktsa az Y formz sztring alapjn.

    Pl.

    Format(100/3,"0.00") "33,33"

    Format(CDate("89.12.05"), "Long Date") "1989. december 5."

  • 13

    2.2.4. Az rtkad utasts

    Az rtkad utastssal egy vltoznak adhatunk rtket. Az utasts szintaktikja:

    [Let] varname = expression

    varname A vltoz azonostja.

    expression A troland rtket meghatroz kifejezs.

    Az utasts vgrehajtsakor elszr kirtkeldik az rtkads jobb oldaln ll kifejezs (expression), azaz kiszmtdik a kifejezs rtke, majd ha a kapott rtk trolhat az adott vltozban (varname), akkor megtrtnik a trols, klnben futsi (run-time) hiba lp fel.

    Megjegyzs

    Az utasts kulcsszava (Let) elhagyhat, ezrt tbbnyire el is hagyjuk.

    A szmols kzben, illetve a trols eltt a VB implicit (ltalunk nem definilt) tpuskonverzikat hajthat vgre. A megfelel konverzis fggvnyek hasznlatval azonban explicit (ltalunk megadott) mdon szablyozhatjuk a szksges tpuskonverzikat, gy elkerlhetjk az implicit tpuskonverzikat s az esetlegesen ebbl ered programhibkat.

    Pl.

    Dim i As Byte 'Az i vltoz deklarlsa

    i = 255 'A legnagyobb Byte rtk

    i = i + 1 'Tlcsordulsi hiba (Overflow)!

    v = "szveg" 'Variant tpus vltozba szveget

    v = 3.14 'Variant tpus vltozba szmot

    i = "a" 'Tpuskeveredsi hiba (Type mismatch)

    i = "2" + "2" 'Az i vltozba 22 kerl

    i = "2" + "2" * "2" 'Az i vltozba 6 kerl

    A pldban egy Byte tpusra deklarlt i s egy deklarlatlan (ezrt Variant tpus) v vltoznak adunk klnbz rtkeket.

    Az els rtkads a legnagyobb Byte tpus adatot teszi az i vltozba. Ezzel nincs semmi baj, de ekkor a msodik rtkads tlcsordulsi (overflow) futsi hibt eredmnyez, hiszen a kifejezs rtke 256 lesz, ami mr nem trolhat az i vltozban. Ha az i vltoz aktulis rtke (tartalma) nem 255, akkor az utasts rendben vgrehajtdik, azaz az i vltozban eggyel nagyobb szm lesz, mint az rtkads eltt.

    A harmadik s negyedik rtkads azt szemllteti, hogy egy Variant tpus vltozba klnbz tpus adatokat is tehetnk.

    Az tdik rtkads egy tpuskeveredsi (type mismatch) futsi hibt ad, hiszen egy (szmm nem alakthat) szveget szeretnnk trolni egy numerikus vltozban.

    Az utols kt rtkads az automatikus tpuskonverzit szemllteti. Az egyik rtkads kifejezsnek eredmnye 22, hiszen kt db sztringet fznk ssze, de az i vltozba ennek a sztringnek az egsz szmm alaktott rtke kerl. A msik rtkadsban a szorzs mvelet hajtdik vgre elszr (a nagyobb priorits miatt), ezrt a szorzs operandusai szmm konvertldnak, majd sszeszorzdnak (4). Mivel a + mvelet egyik operandusa numerikus, ezrt ez a mvelet az sszeads mvelet lesz (s nem a sztringek sszefzse), ami szintn numerikuss alaktja a bal oldali operandust ("2"). Eredmnyl teht a 6 rtk szmoldik ki, s troldik az i vltozban.

  • 14

    2.2.5. Adatok bekrse

    Egy vltoznak nemcsak az elbb ismertetett rtkad utastssal adhatunk rtket. Lehetsg van a vltozk rtkeinek a program futsa (vgrehajtsa) sorn trtn megadsra is. Pldul egy msodfok egyenletet megold program esetn clszer az egyenletet meghatroz egytthatkat bekrni, ahelyett, hogy azok konkrt rtkeit a programba bernnk, hiszen a bekr utasts hasznlatval a program

    mdostsa nlkl tudunk klnbz msodfok egyenleteket megoldani. Elegend csak jra futtatnunk a megold programot s ms bemen adatokat adni.

    Az albbi VB fggvny egy prbeszdablak segtsgvel egy szveges adat bekrst, megadst biztostja. Az utasts (egyszerstett) szintaktikja:

    InputBox(prompt[,title][,default])

    prompt Tjkoztat zenet.

    title Az ablak fejlcben megjelen szveg.

    default Az adat alaprtelmezett rtke.

    Pl.

    Dim n As Integer

    n = InputBox("Krem az adatok szmt!")

    A plda egy egsz szm bekrst szemllteti, ahol csak a ktelez (prompt) paramtert adtuk meg. A bekrt szveges adatot egy numerikus vltozba (n) tesszk (implicit tpuskonverzival), ezrt rossz adat (pl. nem szmm alakthat szveg) megadsa esetn hibazenetet kapunk.

    A fggvny vgrehajtsakor egy prbeszdablak jelenik meg (lsd 2.1. bra). Az adatot a beviteli mezben kell megadni. A fggvny eredmnye az OK gomb megnyomsa (vagy az Enter billenty letse) esetn a megadott szveg lesz, egybknt pedig (Cancel gomb, Esc billenty, ablak bezrs) az res sztring.

    2.1. bra. A pldban szerepl InputBox fggvny prbeszdablaka

    Megjegyzs

    A fggvnynek egyb opcionlis paramterei is vannak.

    Vals szmok bekrse esetn gyeljnk arra, hogy az implicit tpuskonverzi tizedesjelknt csak a vesszt s az opercis rendszerben belltott tizedesjelet fogadja el. Ha pl. vessz az opercis rendszerben belltott tizedesjel, akkor a pont hasznlata esetn tpuskeveredsi hibt kapunk.

  • 15

    2.2.6. Adatok kirsa

    Tbbnyire mg a legegyszerbb programoknak is vannak bemen (input) s eredmny (output) adatai. A bemen adatok egyik megadsi lehetsgt az elzekben ismertettk, az eredmnyek megjelentsi lehetsgeirl most lesz sz.

    Az albbi VB fggvny egy prbeszdablak segtsgvel egy szveges adatot jelent meg. Az utasts (egyszerstett) szintaktikja:

    MsgBox(prompt[,buttons][,title])

    prompt A kirand adat.

    buttons Az ablak nyomgombjait definil rtk.

    title Az ablak fejlcben megjelen szveg.

    Pl.

    MsgBox("2*3=" & 2*3)

    MsgBox "2*3=" & 2*3

    MsgBox 3^2,,"Hrom ngyzete"

    Az els kt esetben a kirand adatot kt adat (egy szveg s egy szm) sszefzsvel lltottuk el, a harmadik esetben nem adtuk meg a buttons paramtert. A megfelel prbeszdablakok a 2.2. brn lthatk (az els kt MsgBox hvs ugyanazt eredmnyezi).

    2.2. bra. A pldban szerepl MsgBox fggvnyek prbeszdablakai

    Megjegyzs

    A kirand adat tetszleges tpus kifejezssel megadhat, ekkor a kifejezs rtke (implicit tpuskonverzival) sztringg konvertldik. Vals szmok tizedesjele az opercis rendszerben belltott tizedesjel lesz.

    Ha a buttons paramtert elhagyjuk, akkor csak az OK gomb jelenik meg. A paramterrel nemcsak a megjelen nyomgombok, de a prbeszdablak egyb tulajdonsgai is definilhatk.

    A fggvnynek egyb opcionlis paramterei is vannak.

    Noha a MsgBox fggvny, a fggvny visszatrsi rtkt csak akkor hasznljuk, ha be kell azonostani, hogy melyik gombbal zrjk be az ablakot.

    A pldban szerepl MsgBox fggvnyt eljrsknt hvtuk meg. A szubrutinokrl s azok hvsi szablyairl (pl. zrjel kiraks/elhagys) a 2.4.1. fejezetben lesz sz.

    Ha sok adatot kell megjelentennk, akkor az egyenknti megjelents esetn minden adat utn be kell zrnunk a megjelen prbeszdablakot. Alkalmazva az elz pldban szerepl gondolatot, clszer az sszes megjelentend adatot egy sztringg sszefzni, gy elegend egyetlen MsgBox hvs az adatok megjelentsre. Ennl a megoldsnl az adatokat a Chr(13) (carriage return), illetve Chr(10) (linefeed) karakterek segtsgvel tbbsoros szvegg is alakthatjuk. Mivel a MsgBox ltal kirt szveg max. 1024 db karakterbl llhat, ezrt nagy mennyisg adat kirsra inkbb az albiakban ismertetsre kerl megoldst hasznljuk.

    Az adatmegjelents trtnhet a Debug objektum Print metdusnak segtsgvel is, amely a Visual Basic Editor (lsd 3.2. fejezet) Immediate ablakba (lsd 3.2.1. fejezet) r ki. Az objektumokrl a 2.6. fejezetben, az Excel objektumairl a 4.1. fejezetben lesz sz.

  • 16

    Szintaktika:

    Debug.Print [outputlist]

    outputlist A kirand kifejezst vagy kifejezseket megad lista.

    A lista egy elemnek (kifejezsnek) megadsi szintaktikja:

    [{Spc(n)|Tab(n)}] expression charpos

    Spc(n) n db szkz kirsa (opcionlis).

    Tab(n) A kirs az nedik oszlopban kezddjn (opcionlis).

    expression A kirand kifejezs (opcionlis).

    charpos A kvetkez kirand adat kezdpozcijnak megadsa (opcionlis).

    Pl.

    Debug.Print ("2*3=" & 2*3)

    Debug.Print "2*3="; 2*3; Tab(10); "3*4=; 3*4

    Megjegyzs

    A metdushvsokra a szubrutinok hvsi szintaktikja rvnyes (lsd 2.4.1. fejezet).

    Ha a charpos pontosvessz, akkor az aktulis sorban folytatdik a kirs, egybknt meg a kvetkez sor elejn, gy egy Debug.Print hvs utols adata utn kirakott vagy elhagyott pontosvesszvel szablyozhat, hogy a kvetkez Debug.Print hol kezdje a kirst.

    Ha a kirs mr meghaladta a Tab(n) ltal megadott oszlopot, akkor a kvetkez sor n-edik oszlopban folytatdik a kirs.

    A kirand adatok vesszvel is elvlaszthatk.

    A Print metdus az opercis rendszerbeli tizedesjelet hasznlja.

    Az Immediate ablak (lsd 3.2.1. fejezet) tartalma szerkeszthet. Szerkesztskor gyeljnk arra, hogy a kirs majd attl a helytl kezddik el, ahol a kurzor llt, gy knnyen sszekeveredhetnek az egyes futsok ltal kirt adatok. Clszer teht az ablakban lv szveg vgre llni (pl. Ctrl+End), vagy trlni az ablak teljes tartalmt (pl. Ctrl+A, Del), mieltt elindtunk egy programot, amely az Immediate ablakba r.

    Az ismertetett utastsokon kvl ms eszkzk is rendelkezsnkre llnak arra, hogy a programunk adatokat kapjon, illetve adatokat jelentsen meg. A 3.2.7. fejezetben vizulis vezrlk segtsgvel, mg a 4.1.3. fejezetben Excel munkafzet segtsgvel valsul meg a felhasznli input/output.

    A VB ltalnos fjlkezelsrl nem lesz sz, de azt megemltjk, hogy a fjlkezel utastsok segtsgvel adatainkat fjlba menthetjk, illetve onnan visszatlthetjk, gy kt klnbz futs kztt is megrizhetjk adatainkat.

  • 17

    2.3. Vezrlszerkezetek Az eddigiekben sz volt a vltozk deklarlsrl, az rtkad utastsrl, az adatbekr s adatkir lehetsgekrl, gy ezekbl mr sszellthatunk egy olyan programot, amely bizonyos bemen adatokbl valamilyen eredmnyadatokat szmol, s ezeket meg is jelenti. A megfelel utastsokat ilyenkor egyszeren sorban egyms utn (szekvencilisan) megadjuk, illetve vgrehajtatjuk.

    De mi van akkor, ha egy utastst csak egy adott felttel teljeslse esetn kell vgrehajtani, vagy ha egy utastst tbbszr is vgre szeretnnk hajtani? Szksgnk van olyan eszkzkre, amelyekkel az egyes tevkenysgek vgrehajtsi sorrendje elrhat. Ezeket az eszkzket vezrlszerkezeteknek nevezzk.

    A strukturlt programozs hrom vezrlszerkezet hasznlatt engedi meg, ezek a szekvencia, a szelekci s az iterci. Bizonytottan minden algoritmus megadhat ezekkel a vezrlszerkezetekkel, ezrt a feladatok megoldsnl mi is csak ezeket fogjuk hasznlni.

    Szekvencia: Az utastsok egyms utn, a megadsuk sorrendjben hajtdnak vgre.

    Szelekci: A vgrehajtand utasts(ok) felttel(ek)tl fggen kerl(nek) kivlasztsra.

    Iterci: Egy vagy tbb utasts ismtelt vgrehajtsa.

    Megjegyzs

    A strukturltsg s a forrsprogramok ehhez igazod tagolsa ttekinthetbb, ezltal knnyebben karbantarthat programokat eredmnyez.

    A VB megenged nem strukturlt programokat eredmnyez, specilis vezrlstad utastsokat (pl. GoTo, Exit) is, de ezekkel nem foglalkozunk.

    2.3.1. Szekvencia

    A szekvencia vezrlszerkezetben a program utastsai (algoritmus esetn ez egyes lpsek, tevkenysgek) egymst kveten, az utastsok megadsi sorrendjben hajtdnak vgre. A VB-ben az egyes utastsokat ltalban kln sorokba rjuk, de egy sorba tbb utastst is rhatunk, ekkor az utastsok kz kettspontot kell tenni.

    Pl.

    'Utastsok megadsa egy sorban (vgrehajts: balrl jobbra haladva)

    Dim i As Integer: i = 3 * 5: MsgBox (i)

    'Utastsok megadsa egymst kvet sorokban (vgrehajts: fentrl lefel)

    Dim i As Integer

    i = 3 * 5

    MsgBox (i)

    Megjegyzs: A ktfle megads tetszs szerint, vegyesen is alkalmazhat.

  • 18

    2.3.2. Szelekci

    A szelekci vezrlszerkezet segtsgvel a vgrehajtand utastsok kztt szelektlhatunk, azaz megadhatjuk, hogy mikor melyik utasts, illetve utastsok hajtdjanak vgre. Az albbiakban azt a szelekcis utastst ismertetjk, amelyben a vgrehajtand utastsok (statements) logikai kifejezsekkel (condition) vlaszthatk ki.

    Az If utasts szintaktikja:

    If condition Then [statements] [Else elsestatements]

    vagy

    If condition Then

    [statements]

    [ElseIf condition-n Then

    [elseifstatements]]

    ...

    [Else

    [elsestatements]]

    End If

    Az els esetben az egsz utasts egy sorba kerl (ekkor nem kell End If az utasts vgre), mg a msodik esetben tbb sorba (ahol az egyes gakban lv utastsok beljebb tagolsa nem ktelez, de javtja az ttekinthetsget).

    Vgrehajts:

    Az els teljesl felttelhez tartoz utastsok kerlnek vgrehajtsra.

    Ha egyik felttel sem teljesl s az Else g definilt, akkor ezek az utastsok (elsestatements) kerlnek vgrehajtsra.

    Pl.

    If d = 0 Then

    MsgBox ("Nulla")

    ElseIf d > 0 Then

    MsgBox ("Pozitv")

    Else

    MsgBox ("Negatv")

    End If

    Megjegyzs

    Az egyes gakban jabb If utastsok is lehetnek, azaz az If utastsok egymsba gyazhatk.

    A VB msik szelekcis utastsa a Select Case utasts, amely egy (ltalban nem logikai, hanem pl. egsz, szveg) kifejezs rtke alapjn vlasztja szt az egyes gakat. Az utastst nem rszletezzk, de megjegyezzk, hogy minden Select Case utasts felrhat If utasts segtsgvel is.

  • 19

    2.3.3. Iterci

    Az iterci vezrlszerkezet segtsgvel egy vagy tbb utasts ismtelt vgrehajtsa valsthat meg. Azokat az utastsokat, amelyeket az iterci (vagy ms nven ciklus) ismtelten vgrehajt, ciklusmagnak nevezzk. Hrom alapvet ciklusfajta ltezik: az elltesztel, a htultesztel s a nvekmnyes ciklus.

    Az elltesztel ciklus a ciklust vezrl felttelt a ciklusmag vgrehajtsa eltt vizsglja, a htultesztel ciklus pedig a ciklusmag vgrehajtsa utn. A nvekmnyes ciklus egy specilis elltesztel ciklus, amely a ciklusmagot egy vltoz adott rtkei mellett hajtja vgre.

    Mivel a ciklusszervezs a programozs egyik alapvet eleme, ezrt a magas szint programozsi nyelvek (gy a VB is) mind a hrom ciklusfajtt tmogatjk. Ez lehetv teszi, hogy az adott feladathoz legjobban illeszked ciklusfajtt vlasszuk, amivel a megoldsunk (programunk) rthetbb s ttekinthetbb lesz, de megjegyezzk, hogy az elltesztel ciklussal a msik kt ciklusfajta is megvalsthat.

    A VB ciklusszervez utastsait ismertetjk a tovbbiakban.

    A While ciklus szintaktikja:

    While condition

    [statements]

    Wend

    Vgrehajts:

    Amg a ciklust vezrl felttel (condition) igaz, addig vgrehajtdnak a ciklusmag utastsai (statements).

    A felttelt mindig a ciklusmag vgrehajtsa eltt vizsglja (elltesztel ciklus), ezrt lehet, hogy a ciklusmag egyszer sem kerl vgrehajtsra (ekkor res ciklusrl beszlnk).

    Megjegyzs: A ciklusmag utastsainak hatssal kell lennie a felttel igazsgrtkre (ez a Do ciklusra is rvnyes), klnben a ciklus res ciklus, vagy vgtelen ciklus (ekkor a Ctrl+Break vagy az Esc billentykkel lellthat a programfuts).

    Pl.

    i = 1

    While i =end, ha step

  • 20

    Pl.

    For i = 1 To 5 Step 2

    MsgBox i

    Next

    Megjegyzs: A VB-ben ltezik egy olyan specilis ciklusutasts is (For Each), amelyben a ciklusvltoz egy gyjtemny objektumain lpdel vgig (lsd 4.2.4. fejezet).

    A Do ciklus szintaktikja:

    Do [{While|Until} condition]

    [statements]

    Loop

    vagy

    Do

    [statements]

    Loop [{While|Until} condition]

    Vgrehajts:

    A ciklust vezrl felttel (condition) vizsglata az els esetben a ciklusmag (statements) vgrehajtsa eltt (elltesztel ciklus), a msodik esetben pedig utna (htultesztel ciklus) trtnik meg.

    While kulcssz esetn, ha a felttel igaz, akkor a ciklusmag (ismtelt) vgrehajtsa kvetkezik, egybknt a ciklusbl val kilps.

    Until kulcssz esetn, ha a felttel igaz, akkor a ciklusbl val kilps trtnik, egybknt a ciklusmag (ismtelt) vgrehajtsa.

    A Do ciklusutasts teht egy olyan ltalnos ciklusszervez utasts, amellyel mind az elltesztel, mind a htultesztel ciklusfajta megvalsthat, radsul gy, hogy a felttellel megadhatjuk az ismtls, illetve a kilps felttelt is.

    Megjegyzs

    A ciklusmag utastsainak beljebb tagolsa nem ktelez, de az ttekinthetsg rdekben clszer.

    Az If utastshoz hasonlan a ciklusok is egymsba gyazhatk.

    Vegyk szre a For ciklus step=0 esett, s a Do ciklust vezrl felttel elhagyhatsgt! Ekkor a ciklusokbl val kilps az Exit For, Exit Do utastsok segtsgvel trtnhet, amelyeket a strukturltsg megrzse rdekben nem emltettnk (de a VB megengedi a hasznlatukat).

  • 21

    2.4. Szubrutinok Szubrutinon egy jl meghatrozott, nll tevkenysgsort megvalst, formailag is elklnl programrszt rtnk. A szubrutinok tnyleges vgrehajtshoz ltalban egy msik, a szubrutint aktivizl, azt meghv programrsz is szksges. Egy szubrutin tbbszr is meghvhat, gy annak szolgltatsai a program megfelel helyein egy-egy hvssal ignybe vehetk.

    A szubrutin a programtervezs, illetve programozs alapszint, de egyben alapvet fontossg eszkze. Hasznlatukkal rvnyesthet az egysgbezrsi elv, miszerint egy adott feladat megoldshoz szksges adatoknak s a rajtuk dolgoz algoritmusnak egy olyan egysge valsthat meg, amely csak a szksges mrtkben kommunikl a klvilggal, a szubrutint hv programrszekkel, egybknt zrt, dolgait sajt maga intzi, azokba nem enged bepillantst.

    Megklnbztetjk a szubrutin deklarlst, ahol definiljuk a szubrutin ltal vgrehajtand tevkenysgeket, a klvilggal val kapcsolattarts mdjt s szablyait, valamint a szubrutin hvst, amikor felhasznljuk a szubrutin szolgltatsait, vagyis definilva a kapcsolattarts eszkzeit, kivltjuk a tevkenysgsor egy vgrehajtst.

    A kapcsolattarts legfbb, de nem kizrlagos (hiszen pl. mindenhonnan lthat (public) vltozkon keresztl is trtnhet a kommunikci) eszkzei a paramterek.

    A helyes programozsi stlus a teljes paramterezsre val trekvs. Ez azt jelenti, hogy egy szubrutin a mkdshez szksges adatokat a paramterein keresztl kapja, s az eredmnyeket (a fggvnyrtk kivtelvel) ezeken keresztl adja vissza. Ezzel ugyanis elkerlhet egy esetleges mdosts olyan

    mellkhatsa, amely a program egy tvoli rsznek vgrehajtsakor, elre nem ltott, nem tervezett vltozst, s ezzel tbbnyire nehezen felderthet hibt okoz.

    Megjegyzs

    A VBA-ban megrt sszes forrsprogram modulokba, azon bell szubrutinokba szervezett. Egy VBA projekt felptsrl a 3.2.3. fejezetben lesz sz.

    Az objektumorientlt programozs objektumtpusai (osztlyai) az adatoknak s a rajtuk dolgoz algoritmusoknak egy mg ltalnosabb egysgt valstjk meg azltal, hogy az adatokhoz nemcsak egy, de tetszleges szm algoritmus rendelhet. Az algoritmusokat megvalst szubrutinok (ms terminolgival metdusok, tagfggvnyek) egyrszt ltjk az objektum adatait, msrszt k definiljk, rjk le, modellezik az objektum viselkedst. Osztlyokat nem fogunk definilni, de az Excel objektumait (lsd 4.1. fejezet) hasznlni fogjuk.

    2.4.1. Deklarci s hvs

    Ktfle szubrutint klnbztetnk meg, az eljrst s a fggvnyt. Az eljrst ltalban akkor hasznljuk, ha valamilyen tevkenysget kell vgrehajtanunk, a fggvnyt pedig akkor, ha valamilyen eredmnyrtket kell kiszmolnunk.

    Mivel mind az eljrs, mind a fggvny kpes adatokat kapni s eredmnyadatokat visszaadni, gy egy adott szubrutin eljrs, illetve fggvny alakban is programozhat. Az, hogy egy szubrutint eljrs vagy fggvny formjban runk meg, nem elvi krds, inkbb programozi stlus krdse. A kt forma egymssal ekvivalens mdon mindig helyettesthet. Az eljrsok s fggvnyek deklarlsa s hvsa, ha kicsit is, de eltr.

    Eljrs deklarlsnak (egyszerstett) szintaktikja:

    [Private|Public] Sub name[(arglist)]

    [statements]

    End Sub

    Fggvny deklarlsnak (egyszerstett) szintaktikja:

    [Private|Public] Function name[(arglist)] [As type]

    [statements]

    [name=expression]

    End Function

  • 22

    Private A szubrutin csak abbl a modulbl hvhat, amelyikben deklarltuk.

    Public A szubrutin minden modulbl meghvhat (ez az alaprtelmezs).

    name A szubrutin azonostja.

    arglist A szubrutin formlis paramterei (opcionlis).

    type A fggvny eredmnyrtknek a tpusa.

    Vegyk szre, hogy a fggvny utastsai kztt szerepel egy olyan rtkad utasts is, amivel a fggvny nevnek (name) mint vltoznak adunk rtket. Ez az utasts szolgl a fggvny eredmnynek a belltsra. Tbb ilyen utasts is elhelyezhet a fggvny utastsai kztt, de clszer egyet elhelyezni, azt is a fggvny vgn, azaz az End Function utasts eltt.

    A formlis paramterek megadsnak szintaktikja:

    [Optional][ByVal|ByRef][ParamArray]varname[()][As type][=defaultvalue]

    Optional A paramter elhagyhat.

    ByVal A paramter tadsa rtk szerinti.

    ByRef A paramter tadsa cm szerinti (ez az alaprtelmezs).

    ParamArray Tetszleges szm Variant tpus paramter tadshoz.

    varname A paramter azonostja.

    type A paramter tpusa.

    defaultvalue Az opcionlis paramter alaprtelmezett rtke.

    A paramterek neve eltt ll kulcsszavakkal a paramterek elhagyhatsga, valamint a paramterek

    tadsi mdja definilhat. Az rtk szerinti (ByVal) paramtereken keresztl a szubrutin csak kaphat adatokat, mg a cm szerinti tads (ByRef) paramtereken keresztl kaphat is, s vissza is adhat eredmnyeket. Ezrt a ByVal paramtereket a szubrutin bemen (input) adatainak megadshoz, a ByRef paramtereket pedig a szubrutin bemen s/vagy kimen (output) adatainak megadshoz hasznlhatjuk.

    Megjegyzs:

    Ha egy szubrutinnak tbb paramtere van, akkor a paramtereket vesszvel kell elvlasztani.

    Egy Optional paramtert csak Optional paramterek kvethetnek, azaz egy elhagyhat paramtert nem kvethet ktelezen megadand paramter.

    A ParamArray paramter csak a paramterlista utols eleme lehet. Ilyen paramter esetn nem hasznlhatunk Optional paramtereket.

    Ha egy paramternek nem adjuk meg a tpust, akkor a paramter Variant tpus lesz.

    A paramter neve (varname) mgtti res zrjelpr azt jelzi, hogy az tadott paramter egy tmb (lsd 2.5.1. fejezet). A tmbket csak cm szerinti paramtertadssal lehet tadni.

    Eljrs hvsa

    [Call] name[argumentlist]

    name A meghvott eljrs azonostja.

    argumentlist Az aktulis paramterek.

    Az eljrs hvsnak kulcsszava (Call) elhagyhat. Megadsakor az argumentumlistt zrjelbe kell tenni, ha elhagyjuk, akkor a zrjelet is el kell hagyni.

  • 23

    Fggvny hvsa

    A fggvnyek kifejezsek rszeknt hvhatk (hasonlan, mint a VB fggvnyei), azaz a fggvnyhvs brhol llhat, ahol egy, a fggvny eredmnynek megfelel rtk llhat (pl. egy rtkad utasts jobb oldaln). Az aktulis paramterek zrjelei nem hagyhatk el.

    Egy szubrutin hvsakor megtrtnik az aktulis s formlis paramterek megfeleltetse (a paramterek tadsa), majd a vgrehajts a hvott szubrutin utastsaival folytatdik. A hvott szubrutin befejeztvel a vgrehajts a hvst kvet utastssal folytatdik.

    Hvs megnevezett paramterekkel

    Ez a fajta szubrutinhvs knyelmes hvst biztost olyan szubrutinok esetn, amelyeknek sok opcionlis paramtere van. Elegend csak azokat a paramtereket s aktulis rtkeiket felsorolni, amelyeket t akarunk adni, a tbbinek meghagyjuk az alaprtelmezett rtkt.

    Pl.

    ActiveWorkbook.SaveAs FileName:="Mentes.xls"

    A pldban egy objektum egy metdust hvtuk meg, ami az aktv munkafzetet menti el a megadott nvvel. Az objektumokrl s a metdusokrl a 2.6., illetve 4.1. fejezetekben lesz sz.

    Megjegyzs

    ltalban a programnyelvekben kttt a szubrutinok deklarlsnak s hvsnak sorrendje, nevezetesen a deklarlsnak meg kell elznie (forrskd szinten) a hvst, de a VB megengedi, hogy egy szubrutint a hv szubrutin utn deklarljunk.

    Egy fggvny eljrsknt is meghvhat (pl. ha a fggvny eredmnyre nincs szksgnk). Ekkor az eljrs hvsi szablyai rvnyesek. A pldinkban szerepl MsgBox fggvnyt is eljrsknt hvtuk meg a Call sz elhagysval. Az egyetlen paramtert nhol zrjelbe raktuk, de ekkor a zrjelek nem a MsgBox fggvny zrjelei, hanem a paramter egy felesleges zrjelezse.

    Ha egy szubrutint eljrsknt hvunk meg egyetlen paramterrel s elhagyjuk a Call szt, akkor a paramter esetleges (felesleges) zrjelezsvel a paramter tadsa rtk szerinti lesz.

    A metdushvsokra a szubrutinok hvsi szablyai rvnyesek.

    A megnevezett paramterek tetszleges sorrendben megadhatk. A paramterek neve s rtke kz a legyen egyenl (:=) jelet, mg a paramterek kz vesszt kell tenni.

    2.4.2. Mintafeladat

    A szubrutinok deklarlst s hvst az albbi feladat segtsgvel szemlltetjk.

    Feladat: Fordtsunk meg egy adott sztringet!

    Pl.Rti pipitr rtipip itR

    Az albbiakban mind fggvnnyel, mind eljrssal megoldjuk a feladatot, s mindkt esetben egy hv, tesztel szubrutint is ksztnk. Erre azrt van szksg, mert a paramterekkel rendelkez szubrutinok nem futtathatk kzvetlenl (lsd 3.2.6. fejezet), mrpedig a megold fggvnynek, illetve eljrsnak lesz paramtere. A paramtert a megfordtand sztring tadsra, az eljrssal trtn megolds esetn mg az eredmny visszaadsra is hasznljuk.

    Az els megoldsban (Fordit fggvny) a kezdetben res eredmnysztringhez (er) jobbrl hozzfzzk a sztring karaktereit fordtott sorrendben, azaz elszr a legutolst, majd az utols elttit, legvgl az elst. Amikor az eredmnysztring elllt, akkor a megfelel rtkadssal (amikor is a fggvny neve rtket kap) gondoskodunk az eredmny belltsrl.

    A msodik megoldsban (MegFordit eljrs) a kezdetben res eredmnysztringhez (er) balrl hozzfzzk a sztring karaktereit eredeti sorrendben, aminek eredmnyeknt a sztring els karaktere kerl

  • 24

    az eredmnysztring legvgre, a msodik karaktere lesz az utols eltti, vgl az utols karaktere kerl az eredmnysztring legelejre.

    Termszetesen a megoldsok lnyegt ad ciklusok lehetnnek egyformk is, de a ktfajta megkzeltssel azt szerettk volna rzkeltetni, hogy mg egy ilyen egyszer feladatnak is ltezhet tbbfle megoldsa.

    Megjegyzs: Olyan megolds is elkpzelhet, amelyben a sztring megfelel karakterprjait cserlgetjk fel. Az els karaktert az utolsval kell kicserlni, a msodikat az utols elttivel, s gy tovbb.

    'Sztring megfordtsa fggvnnyel

    Function Fordit(st As String) As String

    Dim i As Integer

    Dim er As String

    er = ""

    For i = Len(st) To 1 Step -1

    er = er + Mid(st, i, 1)

    Next

    Fordit = er

    End Function

    'A Fordit tesztjhez ez indtand

    Sub Teszt1()

    'Hvskor a cm szerinti (ByRef) paramter (st) helyn llhat rtk is

    MsgBox Fordit("Kitn vt rokonok orrtvn tik")

    End Sub

    'Sztring megfordtsa eljrssal

    Sub MegFordit(st As String)

    Dim i As Integer, er As String

    er = ""

    For i = 1 To Len(st)

    er = Mid(st, i, 1) + er

    Next

    'A cm szerinti (ByRef) paramterben (st) adjuk vissza az eredmnyt

    st = er

    End Sub

    'A MegFordit tesztjhez ez indtand

    Sub Teszt2()

    Dim s As String

    'Call esetn kell a zrjel

    s = "Indul a grg aludni": Call MegFordit(s): MsgBox s

    'Call nlkl nem kell a zrjel

    s = "Gza kk az g": MegFordit s: MsgBox s

    End Sub

    A fejezet lezrsaknt megjegyezzk, hogy a VB nem engedi meg a szubrutinok egymson belli deklarlst, de a rekurzit (amikor is egy szubrutin nmagt hvja meg, vagy tbb szubrutin hvja egymst klcsnsen) igen. A rekurzv algoritmusok irnt rdekldknek a szakirodalmat (pl. [3], [4]) ajnljuk.

  • 25

    2.5. sszetett adattpusok Az eddig megismert adattpusokkal ellenttben, ahol egy vltozban csak egy adatot trolhatunk egy idben, az sszetett adattpusok segtsgvel tbb adat egyttes kezelsre is lehetsgnk nylik.

    2.5.1. Tmbk

    A tmb egy ltalnosan s gyakran hasznlt eszkz a szoftverfejlesztk, programozk krben, mivel a tmbkkel knyelmesen kezelhetnk tbb, azonos tpus adatot. Az adatok elrsre, vagyis a tmbk elemeinek kivlasztsra sorszmokat, ms nven indexeket hasznlunk.

    Ha az elemeket egy sorszmmal azonostjuk, akkor egydimenzis tmbrl, ha kt sorszmmal, akkor ktdimenzis tmbrl, ha n db sorszmmal azonostjuk, akkor n dimenzis tmbrl beszlnk. Egy tmb egy elemnek kivlasztshoz teht pontosan annyi index szksges, ahny dimenzis az adott tmb.

    Ahogy az egyszer adattpusok esetn is megklnbztettk az adatot (pl. 3) az t trol vltoztl (pl. i) s annak tpustl (pl. Integer), itt is kitrnk ezek klnbzsgre. A tmb elnevezs ugyanis a rvidsge miatt mind a hrom esetben hasznlatos, gy a tmb lehet:

    Tmbadat: amely egydimenzis tmb esetn egy adatsornak, vagy matematikai fogalommal egy vektornak, ktdimenzis tmb esetn egy adattblzatnak, vagy mtrixnak felel meg.

    Tmb adattpus: amely definilja a tmb dimenziit s a tmb elemeinek tpust.

    Tmbvltoz: amelyben az adatok troldnak. Egy elem kivlasztsval, azaz a tmbvltoz indexelsvel egy, a tmb elemtpusval megegyez tpus vltozt hivatkozunk.

    Egy tmbt a hasznlata eltt deklarlni kell, azaz definilnunk kell a tmb elemeinek tpust s a tmb dimenziit.

    A deklarls (egyszerstett) szintaktikja:

    Dim varname[([subscripts])] [As type] [,...]

    Az indexek (subscripts) megadsnak szintaktikja:

    [lower To] upper [,[lower To] upper] ,...

    Pl.

    Dim a(10) As Integer 'Egydimenzis tmb

    Dim b(1 To 5, -3 To 2) As Double 'Ktdimenzis tmb

    Vegyk szre, hogy az egyes dimenzik als indexhatra elhagyhat. Az explicit mdon nem definilt als indexhatrok rtkeit az Option Base (modulszint) utasts hatrozza meg.

    Az utasts szintaktikja:

    Option Base {0|1}

    rtelemszeren a megadott rtk (0 vagy 1) lesz a tmbk als indexhatra. Alaprtelmezsben az Option Base 0 van rvnyben, azaz a tmbelemek als indexhatra 0.

    Megjegyzs: Noha a VB-ben egy tmb dimenziinak maximlis szma 60 lehet, azaz hasznlhatunk hrom, ngy, , 60 dimenzis tmbket, a gyakorlatban az egy- s ktdimenzis tmbk a leggyakoribbak.

    Az elzekben ismertetett deklarls n. statikus tmbket deklarl, amelyek mrete fordtsi idben meghatrozdik, s futsi idben mr nem vltoztathat. A VB azonban megengedi az n. dinamikus tmbk hasznlatt is, amelyek mrete a program futsa sorn megvltoztathat. Ezeket a tmbket is a Dim utastssal deklarljuk, de az els deklarlsnl csak a tmbelemek tpust adjuk meg, a dimenzikat nem. A tmb tmretezse ezutn a ReDim utastssal trtnik, amelyben elrhatjuk, hogy a mr definilt rtk tmbelemek rtkeit megrizzk-e (Preserve) vagy sem.

  • 26

    Ha egy tmb mrett kisebbre lltjuk, akkor az eltnt tmbelemek rtkeit elvesztjk, mg egy tmb

    mretnek nvelsekor keletkez j elemek (a deklarlt vltozkhoz hasonlan) numerikus elemtpus tmb esetn 0, a logikai elemek esetn False, mg String tpus esetn az res sztring kezdrtket kapjk. Ilyen rtkeket kapnak az j tmb elemei akkor is, ha a Preserve kulcsszt elhagyjuk.

    Szintaktika:

    ReDim [Preserve] varname(subscripts) [As type] [,...]

    Pl.

    Dim a() As Integer 'Dinamikus tmb egszekbl

    ReDim a(5) 'A tmb legyen 5 elem

    For i = 1 To 5 'A tmb hasznlata

    a(i) = i

    Next

    ReDim Preserve a(10) 'A tmb legyen 10 elem

    'Az els 5 elem rtke megmarad, a tbbi 0 lesz

    Megjegyzs

    A pldban feltettk, hogy a modulban az Option Base 1 utasts van rvnyben.

    Egy dinamikus tmb tbbszr is tmretezhet, de az elemek tpusa nem vltoztathat meg.

    A dinamikus tmbk a ReDim utastssal kzvetlenl (a Dim utasts nlkl) is deklarlhatk, ekkor az elemek tpust is itt adjuk meg (pl. ReDim a(5) As Integer).

    Az, hogy statikus vagy dinamikus tmbket hasznlunk-e egy feladat megoldsa sorn, az attl fgg, hogy ismerjk-e elre az adatok maximlis szmt vagy sem. Ha ismerjk, akkor statikus (az adott maximumra deklarlt) tmbt hasznlunk, s az adatok aktulis szmt egy kln vltozban troljuk. Ebben az esetben csak akkor lesz helypazarl a megoldsunk, ha az adatok maximlis szma (azaz a tmb ltal lefoglalt memria mrete) jval nagyobb, mint az adatok aktulis szma.

    Ha az adatok maximlis szmt nem tudjuk elre meghatrozni, akkor a megoldst dinamikus tmbkkel vgezzk. Ebben az esetben a tmbt mindig akkorra deklarljuk, hogy az adataink ppen elfrjenek benne, gy a megolds sose foglal le tbb memrit, mint amennyi szksges.

    A VB az UBound (fels hatr) s LBound (als hatr) fggvnyekkel biztostja a tmbk deklarlt indexhatrainak lekrdezhetsgt.

    Szintaktika:

    UBound(arrayname[,dimension])

    LBound(arrayname[,dimension])

    arrayname A tmb azonostja.

    dimension A lekrdezend dimenzi sorszma (alaprtelmezett rtke 1).

    Pl.

    Dim a(10) As Integer

    Dim b(1 To 5, -3 To 2) As Double

    UBound(a) 10 UBound(b) 5 UBound(b,2) 2

    LBound(a) 0 LBound(b) 1 LBound(b,2) 3

    Megjegyzs: A pldban feltettk, hogy a modulban az Option Base 0 utasts rvnyes.

  • 27

    2.5.2. Rekordok

    A tmbk (legyenek azok egy-, vagy tbbdimenzisak) azonos tpus adatok egy sszessgnek hasznlatt biztostottk. Ha azonban klnbz tpus adatok egy sszessgt szeretnnk egytt kezelni, akkor egy jabb tpust, a rekord adattpust kell hasznlnunk. A rekord adattpussal ugyanis tbb, tetszlegeses szm s tpus adatot foglalhatunk egy logikai egysgbe.

    Ezt az adattpust kln kell definilnunk, ugyanis meg kell adnunk a rekord felptst, azaz a rekordot alkot mezk azonostjt s tpust.

    A rekordtpus megadsnak (egyszerstett) szintaktikja:

    Type name

    elementname[([subscripts])] As type

    elementname[([subscripts])] As type

    ...

    End Type

    name A rekordtpus azonostja.

    elementname Az adott mez azonostja.

    subscripts Ha a mez tmb, akkor annak indexhatrai.

    type Az adott mez tpusa.

    Pl.

    Type Adat

    Nev As String * 20 'Fix (20) hossz sztring

    Jegyek(1 To 2) As Byte

    End Type

    A plda egy olyan rekordtpust (Adat) definil, amelynek kt mezje van. Az els mez (Nev) egy fix hossz sztring, a msodik mez (Jegyek) egy 2 elem, egydimenzis, Byte elemtpus tmb.

    Megjegyzs

    Az egyes mezk beljebb tagolsa nem ktelez, csak az ttekinthetsget segti.

    A pldban fix hossz sztringtpust (String * 20) hasznltunk, de a vltoz hossz String tpust is hasznlhattuk volna.

    A Type utasts modulszint utasts.

    Egy definilt rekordtpus ugyangy hasznlhat vltozk deklarlsra, mint a VB tbbi adattpusa.

    Pl.

    Dim h As Adat, a(1 To 3) As Adat

    A plda kt vltozt deklarl. A h vltozban egy rekord adatai trolhatk, mg az a vltoz hrom rekord trolsra alkalmas.

    A rekord mezire val hivatkozs:

    rekordvltoz.meznv

    A rekordok egyes mezire gy hivatkozhatunk, hogy a rekordvltoz s a meznv kz egy pontot tesznk. Ezzel a hivatkozssal egy, a mez tpusval megegyez tpus vltozt hivatkozunk, amit ennek megfelelen hasznlhatunk. A rekordokra nem definiltak mveletek, de az azonos tpus rekordvltozk kztt megengedett az rtkads (lsd 2.5.3. fejezet).

  • 28

    Pl.

    h.Nev = "Halsz Helga"

    a(1).Jegyek(1) = 5

    A mezkre val hivatkozs a With utasts segtsgvel rvidthet. Ekkor a rekordvltozt elegend egyszer megadni (a With kulcssz utn), a meznevek eltt elhagyhatjuk, de a pontot ki kell tennnk.

    Pl.

    With a(2)

    .Nev = "Vadsz Viktria": .Jegyek(1) = 3: .Jegyek(2) = 4

    End With

    A plda a korbban deklarlt a tmb msodik elemben trolt rekord egyes mezinek ad rtket.

    Megjegyzs

    A With utasts objektumokra is hasznlhat. Az objektumokrl a 2.6., illetve 4.1. fejezetekben lesz sz.

    A With blokkban szerepl utastsok beljebb tagolsa nem ktelez, csak az ttekinthetsget segti.

    A With utastsok egymsba gyazhatk.

    A rekord sz a szakirodalomban ltalnosan hasznlt (ezrt a dokumentumban is ezt hasznltuk), de a VB sgja a rekord adattpusra a felhasznl ltal definilt adattpus (user-defined data type) elnevezst hasznlja.

    Az sszetett adattpus (tmb, rekord) deklarlt vltozk is kapnak kezdrtket, amit a tmbelemek, illetve az egyes mezk tpusa hatroz meg (lsd 2.2.1. fejezet).

    2.5.3. Mintafeladat

    A tmbk s rekordok hasznlatt az albbi feladat segtsgvel szemlltetjk.

    Feladat: Egy hallgati nyilvntartsban ismerjk a hallgatk nevt s adott szm rdemjegyt. Minden hallgatnak ugyanannyi rdemjegye van. Az adatokat egy rekordokbl ll egydimenzis tmbben troljuk. Ksztsnk nvsor szerint rendezett listt, amelyen a hallgatk rdemjegyei is szerepelnek!

    Az albbi megoldsban elszr egy konstanst deklarlunk, amely definilja a hallgatk rdemjegyeinek szmt. Az olyan rtkeket, amelyek a programban tbb helyen is szerepelnek, clszer nvvel elltni, azaz kln deklarlni, mert akkor az rtk esetleges mdostshoz elegend egy helyen (a deklarciban) mdostanunk.

    A konstansok deklarlsnak szintaktikja:

    [Public|Private] Const constname [As type] = expression

    Public A konstans hivatkozhat lesz minden modulbl.

    Private A konstans csak abban a modulban hivatkozhat, ahol deklarltk (ez az alaprtelmezs).

    constname A konstans azonostja.

    type A konstans tpusa (opcionlis).

    expression A konstans rtkt megad kifejezs.

    Pl.

    Const db = 2

  • 29

    Megjegyzs

    Az utasts modul szinten is, s szubrutinon bell is hasznlhat. Az utbbi esetben a konstans csak az adott szubrutinon bell hivatkozhat, s a lthatsgt (hivatkozhatsgt) nem lehet a Public s Private kulcsszavakkal mdostani.

    A konstans rtkt megad kifejezsben konstans rtkek, deklarlt (nvvel azonostott) konstansok, valamint mveletek llhatnak.

    A tpust (type) ltalban elhagyjuk (a pldban is gy tettnk), ekkor a konstans tpusa a kifejezs rtknek legmegfelelbb tpus lesz (esetnkben Byte).

    A konstans definilsa modul szinten trtnt, hiszen az egsz modulban szeretnnk hasznlni. A rekordtpus (amely lerja egy hallgat adatait) deklarcija viszont csak modul szinten (azaz a modul elejn) trtnhet. A nevekhez fix hossz sztring tpust hasznltunk, amely nem engedi meg, hogy a nevek a megadott hossznl (a pldban 20) hosszabbak legyenek.

    Az adatok kirst egy szubrutin (Kiiras) vgzi, amely egy Adat rekordokbl ll tmbt kap paramterknt (a), amit a paramter utn szerepl (res) zrjelpr jelez. A kapott tmbt egydimenzis tmbknt kezeljk, s feltesszk, hogy a tmb minden eleme definilt, amit a Kiiras szubrutin hvja (RendezesTeszt) biztost, ezrt a tmbelemeken vgiglpdel ciklus szervezst a tmb lekrdezett (LBound, UBound) indexhatrai alapjn vgezhetjk. Az adatkirsok utn akkor emelnk sort (egy paramter nlkli Debug.Print hvssal), ha az adott hallgat sszes adatt (nv, rdemjegyek) kirtuk, gy minden hallgat kln sorba kerl. Az eredmnylista a 2.3. brn lthat. Vegyk szre a nevek jobbrl szkzkkel val feltltttsgt (ez a fix hossz sztringek rtkadsakor automatikusan megtrtnik).

    2.3. bra. A mintafeladat eredmnylistja

    Az adatok rendezst a Rendezes szubrutin vgzi, amely (a Kiiras szubrutinhoz hasonlan) szintn megkapja a rendezend adatok tmbjt. Az adatkirs nem vltoztatott a paramterknt kapott adatokon, de a rendez szubrutinnak ppen ez a dolga, nevezetesen hogy nvsor szerinti sorrendbe tegye a tmbben lv adatokat. Mivel a tmb tadsra deklarlt (a) paramter cm szerinti tads (ByRef az alaprtelmezs, s tmbket nem is adhatunk t rtk szerint, lsd 2.4.1. fejezet), ezrt a tmb elemein vgzett vltoztatsokat a hv is rzkelni fogja.

    A rendezst egy, a minimum kivlaszts elvn alapul rendez algoritmus segtsgvel valstottuk meg. A kls ciklus minden egyes lpsben megkeressk (a bels ciklussal) a mg rendezetlen tmbrsz legkisebb elemt (annak indext trolja a k vltoz), s ha ez az elem nincs a helyn (az i-edik helyen), akkor odatesszk. A rekordok kztt rtelmezett az rtkads, ezrt kt elem (i-edik s k-adik) felcserlse elvgezhet hrom rtkadssal (nevezetesen megjegyezzk az egyiket, oda ttesszk a msikat, majd a msikba betesszk a megjegyzett egyiket). Vegyk szre, hogy a cserhez hasznlt vltoz (cs) a tmbelemekkel megegyez (Adat) tpus.

    A minimumkeress gy trtnik, hogy megjegyezzk az adott tmbrsz els elemnek indext, s megvizsgljuk a tbbi elemet. Ha kisebbet tallunk (a rekordok Nev mezje szerinti sszehasonlts szerint, hiszen nvsor szerinti sorrendet szeretnnk ellltani), akkor annak indext jegyezzk meg (hiszen most mr az aktulisan legkisebb). A rendezetlen tmbrsz kezdetben (i=1 esetn) az egsz tmb, utna (i=2 esetn) csak a msodik elemtl az utols elemig (hiszen az els, vagyis a legkisebb elem mr a helyre, a tmb elejre kerlt), s gy tovbb, legvgl (i=UBound(a)-1 esetn) mr csak a tmb kt utols elemt tartalmazza.

    A Rendezes szubrutint a RendezesTeszt szubrutin hvja meg azutn, hogy kezdrtkekkel ltta el az adattrolsra hasznlt tmbvltozt. A tmb azonostsra mindkt helyen ugyanazt az azonostt (a) hasznltuk, de hasznlhattunk volna klnbz azonostkat is. A harmadik szemly (akinek adatait a

  • 30

    tmb msodik elemben troljuk, hiszen a modulban alaprtelmezsben az Option Base 0 rvnyes) adatainak megadsakor a rekordmezkre a With utasts segtsgvel hivatkoztunk, hogy ezt is bemutassuk.

    Megjegyzs

    A megolds csak a VB nyelv lehetsgeit hasznlta, gy szksg volt egy rendez algoritmus programozsra. Ha azonban kihasznltuk volna az Excel VBA lehetsgeit, akkor a hallgatk adatait egy Excel munkalapon trolva egyetlen metdushvssal elintzhet lett volna az adatok rendezse. Az Excel objektumairl s hasznlatukrl a 4.1. fejezetben lesz sz.

    Igen sokfle rendez algoritmus ismert, amelyekbl ez egyik legegyszerbbet vlasztottuk ki. A tmakr irnt rdekldknek a szakirodalmat (pl. [3], [4]) ajnljuk.

    'Egy hallgat rdemjegyeinek szma

    Const db = 2

    'Egy hallgat adatait ler rekordtpus

    Type Adat

    Nev As String * 20 'Fix (20) hossz sztring

    Jegyek(1 To db) As Byte

    End Type

    'Adat tpus elemekbl ll tmb kirsa

    Sub Kiiras(a() As Adat)

    Dim i As Integer, j As Integer

    For i = LBound(a) To UBound(a)

    Debug.Print a(i).Nev;

    For j = 1 To db

    Debug.Print a(i).Jegyek(j);

    Next

    Debug.Print

    Next

    End Sub

    'Adat tpus elemekbl ll tmb rendezse nv szerint

    Sub Rendezes(a() As Adat)

    Dim cs As Adat, i As Integer, j As Integer, k As Integer

    For i = LBound(a) To UBound(a) - 1

    k = i

    For j = i + 1 To UBound(a)

    If a(j).Nev < a(k).Nev Then

    k = j

    End If

    Next

    If k > i Then

    cs = a(i): a(i) = a(k): a(k) = cs

    End If

    Next

    End Sub

  • 31

    'A rendezs tesztjhez ez indtand

    Sub RendezesTeszt()

    Dim a(2) As Adat

    a(0).Nev = "Madarsz Mnika": a(0).Jegyek(1) = 1: a(0).Jegyek(2) = 2

    a(1).Nev = "Vadsz Viktria": a(1).Jegyek(1) = 2: a(1).Jegyek(2) = 3

    With a(2)

    .Nev = "Halsz Helga": .Jegyek(1) = 3: .Jegyek(2) = 4

    End With

    Call Rendezes(a)

    Call Kiiras(a)

    End Sub

    2.6. Objektumok, objektumtpusok Az objektum szt mr hasznltuk (pl. a Debug objektum kapcsn), de mg nem beszltnk arrl, hogy pontosan mit jelent, mit takar az objektum elnevezs az informatikban.

    Objektumon adatok s a rajtuk rtelmezett tevkenysgek egy logikailag sszefgg egysgt rtjk. Az objektum (hasonlan, mint a tmb) egy gyakran s ltalnosan hasznlt sz, ami jelenthet adatot (egy konkrt objektumpldnyt), vltozt (ami trolja s elrhetv teszi az objektum adatait s tevkenysgeit), valamint tpust is (az objektum tpust, amely definilja az objektum adatainak tpust s az objektum tevkenysgeit).

    Az objektumok tevkenysgeit definil szubrutinokat metdusoknak (methods), az objektumok tpust osztlyoknak (class) nevezzk. Az objektumok adataihoz ltalban tulajdonsgok (properties) segtsgvel frhetnk hozz, amelyek vdik az adatok helyessgt (lsd 3.2.3. fejezet).

    Az objektumok azon metdusait, amelyek valamilyen esemny bekvetkezsekor (pl. egy nyomgomb esetn a nyomgomb feletti kattints) aktivizldnak, esemnykezelknek nevezzk. Az esemnyek ltalban valamilyen felhasznli interakci eredmnyeknt kvetkeznek be, de ms fut folyamatok is kivlthatjk az egyes esemnyek bekvetkezst (pl. meghvunk egy esemnykezelt).

    Megjegyzs: A VBA megengedi az osztlyok definilst, de mi csak a kszen kapott osztlyokat fogjuk

    hasznlni.

  • 32

    3. AZ EXCEL VBA HASZNLATA

    Ebben a fejezetben az Excel VBA fejlesztkrnyezetrl lesz sz. Elssorban a forrsprogramok megadshoz, azok futtatshoz, a hibakeresshez kapcsold funkcikat rszletezzk, de itt kapott helyet a vizulis formtervezs is.

    3.1. Makrk A makr parancsok sorozata, amely ismtld feladatok vgrehajtsnak automatizlsra hasznlhat. idzet az Excel sgjbl. A makr sz az adott MS Office (esetnkben az MS Excel) alkalmazs programfejleszt krnyezetben ltrehozott objektumok s VBA forrskdok ltalnos, sszefoglal elnevezse. Az Excel 2010 a makrkat tartalmaz dokumentumokra a Makrbart Excel munkafzet elnevezst hasznlja. A makrkat tartalmaz dokumentumokat ilyen fjlknt mentsk (ezek kiterjesztse xlsm).

    A makrvrusok elterjedsnek megakadlyozsa rdekben az Excel bizonyos belltsai a makrkat tartalmaz dokumentumok kezelsre vonatkoznak. A Fjl, Belltsok, Adatvdelmi kzpont (lsd 3.1. bra) ablakban a jobb als sarokban tallhat Az Adatvdelmi kzpont belltsai nyomgomb segtsgvel (tbbek kztt) megadhatk a makrkra vonatkoz belltsok is (lsd 3.2. bra).

    3.1. bra. Az adatvdelmi kzpont

    Ahhoz, hogy a makrkat tartalmaz dokumentumok megnyitsakor eldnthessk, hogy engedlyezzk

    vagy letiltjuk az adott dokumentumban lv makrkat, az sszes makr letiltsa rtestssel vlasztgombot kell bekapcsolni (lsd 3.2. bra). Ebben az esetben egy makrkat tartalmaz dokumentum megnyitsakor zenetet kapunk. Ha a Visual Basic Editor meg van nyitva, akkor a 3.3. brn szerepl prbeszdablak jelenik meg, egybknt meg a 3.4. brn lthat zenetsv. Mindkt esetben engedlyezhetjk a dokumentumban lv makrkat.

    Az engedlyezs, illetve letilts csak a makrk futtatsra vonatkozik, gy letiltott esetben is megnzhetjk, st akr mdosthatjuk is a makrkat. Az engedlyezs, illetve tilts (adott dokumentumra vonatkoz) megvltoztatshoz zrjuk be s nyissuk meg jra (a kvnt mdon) az adott dokumentumot.

  • 33

    3.2. bra. Az adatvdelmi kzpont makrbelltsai

    3.3. bra. Makrk engedlyezse, illetve letiltsa prbeszdablak

    3.4. bra. Makrk engedlyezse, illetve letiltsa zenetsv

    Megjegyzs

    Ha a 2.7. brn lthat srga szn zenetsvban engedlyezzk a makrkat (Tartalom engedlyezse gomb), akkor az adott szmtgpen a dokumentum megbzhat dokumentumknt kezeldik a tovbbiakban, ezrt jabb megnyitsakor mr nem kell kln engedlyezni a makrkat, egybknt (az zenetsv bezrsval) meghagyjuk a makrk letiltst.

    Egy jonnan ltrehozott munkafzetben ksztett makrk a belltsoktl fggetlenl mindig futtathatk.

  • 34

    3.2. A Visual Basic Editor Alaprtelmezsben az Excel menszalagjn nem lthat a Fejleszteszkzk lap (lsd 3.6. bra), amelyen a Visual Basic fejlesztrendszer, a Visual Basic Editor elrhet, de a gyorsbillentyjvel (Alt+F11) ekkor is megnyithat. A Fejleszteszkzk lap megjelentshez a Fjl, Belltsok, Menszalag testreszabsa prbeszdablakban be kell kapcsolni a lap megjelentst szablyoz jellngyzetet (lsd 3.5. bra).

    3.5. bra. A menszalag testreszabsa

    3.6. bra. A menszalag Fejleszteszkzk lapja

    A Visual Basic Editor egy nll ablakban jelenik meg, de az Excel bezrsval ez az ablak is bezrdik. A fejlesztkrnyezet angol nyelv (men, sg, hibazenetek, stb.), hiba magyar nyelv az Excel, amihez tartozik.

  • 35

    3.7. bra. A Visual Basic Editor

    Br az ablak elrendezse bellthat, egy tipikus elrendezs a 3.7. brn lthat. Fell a mensor, alatta az eszkztrsor, balra fent a Project ablak, alatta a Properties ablak, a jobb oldali, szrke htter munkaterleten most kt ablak lthat. Az egyik a UserForm1 objektum tervezablaka, a msik a UserForm1 objektumhoz tartoz forrskd szerkesztablaka. A munkaterlet alatt az Immediate ablak lthat.

    Valamennyi ablak szabadon megjelenthet, mretezhet, ms helyre tehet, vagy akr be is zrhat. A View men segtsgvel (lsd 3.8. bra) brmikor jra megjelenthet egy bezrt ablak. A gyakran hasznlatos funkcik a helyi men segtsgvel, vagy a hozzjuk tartoz gyorsbillentykkel is aktivizlhatk (pl. F7, Shift+F7). A helyi men (a Windows-ban megszokott mdon) az adott helyen, az egr jobb gombjval hozhat be.

  • 36

    Megjegyzs

    A Visual Basic Editor-ban ltrehozott makrkat nem kell kln menteni, ezek a munkafzet mentsekor elmentdnek. A Visual Basic Editor ments (Save) funkcija az egsz munkafzetet

    menti (csakgy, mint az Excel-beli ments funkci).

    Bizonyos ablakok (pl. Project, Properties, Immediate) rgzthetk (dockable) a munkaterleten, st akr a Visual Basic Editor ablakn kvlre is mozgathatk. Az ablakelrendezs (mely ablakok hol s mekkora mretben jelennek meg) megrzdik, minden belpskor a legutbbi ablakelrendezsben jelenik meg a Visual Basic Editor.

    A nem rgzthet ablakok a nyitson s zrson kvl mg minimalizlhatk (amikor is ikonknt a munkaterlet aljra kerlnek) s maximalizlhatk (ilyenkor a teljes munkaterletet kitltik eltakarva egymst). A nyitott ablakok kztti vlts a kvnt ablakon val kattints mellett, a Window men segtsgvel is elvgezhet, amely a Windows alkalmazsokban szoksos funkcikkal (ablakok klnfle elrendezse, a nyitott ablakok listja, stb.) rendelkezik (lsd 3.8. bra).

    3.8. bra. A Visual Basic Editor View s Window menje

    A fontosabb ablakok szereprl a kvetkez alfejezetekben lesz sz.

  • 37

    3.2.1. Az Immediate ablak

    Az Immediate ablak amellett, hogy a programok egyik output megjelent eszkze (lsd 2.2.6. fejezet), utastsok kzvetlen vgrehajtsra is hasznlhat. A vgrehajtani kvnt utastsokat egy sorba kell rni, tbb utasts esetn az utastsok kz kettspontot kell tenni (lsd 2.3.1. fejezet). A vgrehajtst az Enter billenty letsvel krhetjk.

    Az Immediate ablak tartalma szabadon szerkeszthet, gy pl. a korbban vgrehajtott sorok (esetleges mdostssal) jra vgrehajthatk, a felesleges sorok trlhetk, stb.

    Pl.

    i=2:j=3

    Print i;"*";j;"=";i*j;tab(1);i;"^";j;"=";i^j

    ?"1-10-ig az egsz szmok":for i=1 to 10:?i;:next:?

    Megjegyzs

    A Print s a ? a Debug objektum Print metdust (Debug.Print) hivatkozza rviden.

    Nem minden VB utasts hajthat vgre az Immediate ablakban (pl. Dim utasts).

    Termszetesen itt is csak szintaktikailag helyes utastsok hajthatk vgre. Az esetleges hibazenetet az Enter billenty letse utn kapjuk meg (szemben a kdszerkeszt ablakban bert utastsokkal, ahol mr a szintaktikailag hibs sor elhagysakor megkapjuk a megfelel hibazenetet, ha az erre vonatkoz kapcsol (Auto Syntax Check, lsd 3.2.4. fejezet 3.20. bra) bekapcsolt llapot.

    Az Immediate ablakban csak akkor lehet utastsokat vgrehajtani, ha a munkafzetre vonatkoz biztonsgi belltsok engedlyezik a makrk futtatst (lsd 3.1. fejezet).

    3.2.2. A Project ablak

    Az MS Office VBA fejlesztkrnyezetben a projektek foglaljk egysgbe az adott dokumentumot a hozz tartoz makrkkal. A projekt az adott dokumentumfjlban trolt objektumok ttekinthetsgt, kezelst hivatott szolglni. A Project ablak a Visual Basic Editor View menjnek Project Explorer funkcijval (lsd 3.8. bra) jelenthet meg (lsd 3.7. bra).

    Egy Excel projektben az albbi objektumok szerepelnek, illetve szerepelhetnek:

    Excel objektumok (Microsoft Excel Objects) o Az egyes munkalapok (Munka1,) o A munkafzet (ThisWorkbook)

    Formok (Forms)

    Modulok (Modules)

    Osztlymodulok (Class Modules)

    Az Excel objektumok csoport elemei az adott munkafzethez igazodnak (pl. annyi munkalap objektum szerepel a projektben, ahny munkalapja van az adott munkafzetnek). A munkalap objektumokkal az egyes munkalapok, a ThisWorkbook objektummal a (makrkat tartalmaz) munkafzet hivatkozhat. Ezek az objektumok nem hozhatk ltre, illetve nem trlhetk a Visual Basic Editor-ban, de a hozzjuk tartoz esetleges esemnykezelk (pl. a munkafzet megnyitsa, bezrsa, egy munkalap aktivizlsa, stb.) az objektumhoz tartoz modulban definilhatk (lsd 4.2.4 fejezet).

    A tbbi csoport (formok, modulok, osztlymodulok) elemeit szabadabban kezelhetjk. Ltrehozhatunk (Insert), trlhetnk (Remove), behozhatunk (Import), kivihetnk (Export) elemeket (lsd 3.10. bra).

    A formokrl, a vizulis formtervezsrl a 3.2.7. fejezetben lesz sz.

    A modulok csoport moduljai a forrskdok megadsra hasznlatosak. A logikailag sszetartoz forrskdokat clszer egy modulba tenni. Az esemnykezelket a megfelel objektum moduljban (azaz nem a modulok csoportban) kell elhelyezni. A modulok felptsrl a 3.2.5. fejezetben lesz sz.

    Az osztlymodulokban osztlyokat (objektumtpusokat) definilhatunk.

  • 38

    Az objektumokhoz tartoz modulok megnyitsa (a Project ablak megfelel elemnek kivlasztsa utn) a View men Code funkcijval (lsd 3.8. bra), vagy a Project ablak helyi menjnek View Code funkcijval (lsd 3.10. bra) trtnhet. A modulok csoport moduljait mg (a megfelel modulon val) dupla kattintssal is megnyithatjuk.

    j objektum ltrehozsa a Visual Basic Editor Insert menjvel (lsd 3.9. bra), vagy a Project ablak helyi menjvel (lsd 3.10. bra) trtnhet. A menkben tallhat menpontok vlaszthatsga az aktulis llapottl (kdszerkesztsben voltunk-e ppen vagy sem), illetve a Project ablak aktulis elemtl fgg.

    3.9. bra. A Visual Basic Editor Insert menje

    3.10. bra. A Project ablak helyi menje

    A Project ablak elemeit a helyi men Remove funkcijval trlhetjk, ahol a menpont felirata a kivlasztott objektum nevt is tartalmazza (lsd 3.10. bra bal oldali kpt, ahol a UserForm1 objektum helyi menje lthat). A trls eltt lehetsgnk van a trlt elem exportlsra (azaz nll fjlknt val kimentsre), ami egybknt a helyi men Export File funkcijval is megtehet.

    Az Import File funkcival betlthetnk s az aktulis projekthez adhatunk nll fjlokban lv formokat (*.frm), modulokat (*.bas), s osztlymodulokat (*.cls). Az export s import funkcikkal teht knnyen tudunk objektumokat tvinni projektek kztt.

    Megjegyzs

    A *.frm, *.bas, *.cls fjltpusokat nemcsak az Excel, hanem ms MS Office alkalmazsok, valamint az MS Visual Studio fejlesztrendszer szoftverei is egysgesen kezelik.

    A formok exportlsakor a *.frm fjlon kvl egy *.frx fjl is ltrejn, amely binris informcikat trol a formrl.

    Az osztlymodulokkal nem foglalkozunk (mert ez a tmakr tln a programozsi alapismereteken).

  • 39

    3.2.3. A Properties ablak

    A Properties (tulajdonsgok) ablak a projekthez tartoz objektumok tulajdonsgainak megjelentsre s azok tervezskori megadsra, mdostsra hasznlatos. A vizulis formtervezs (lsd 3.2.7. fejezet) sorn itt adjuk meg az adott form, illetve a formon lv vezrlk tulajdonsgait (lsd 3.7., 3.11. bra).

    Az ablak tetejn lv legrdl listban kivlaszthat az a vezrl (a formot is belertve), amelynek tulajdonsgait ltni, illetve megadni szeretnnk. A tulajdonsgokat ktfle sorrendben tudjuk megjelenteni (a megfelel fl kivlasztsval): nvsor szerint (Alphabetic fl), vagy a tulajdonsgokat kategrik szerint csoportostva (Categorized fl). Ha mr tudjuk az adott tulajdonsg nevt, akkor a nvsor szerinti fln gyorsan megtalljuk, klnben clszer a kategorizlt fln keresglni, hiszen ott az sszes tulajdonsg helyett elegend azon csoport vgignzse, amelyikhez a keresett tulajdonsg tartozik.

    3.11. bra. A Properties ablak

    A Properties ablakban (mindkt fl esetn) kt oszlop lthat, a bal oldali a tulajdonsgok neveit, a jobb oldali azok aktulis rtkeit tartalmazza. Az adatok megadsa a jobb oldali oszlopban trtnik, ahol is az adott tulajdonsgtl fggen vagy begpeljk a tulajdonsg rtkt (pl. Name, Caption, Left), vagy egy kszletbl kivlasztjuk (pl. Enabled, MousePointer, PictureAlignment), vagy egy prbeszdablakkal adjuk meg (pl. Font, Picture).

    A begpelssel megadott adatok rtke ellenrzdik, rvnytelen adat esetn (pl. szm helyett szveget adunk meg) hibazenetet kapunk (lsd 3.12. bra).

    3.12. bra. rvnytelen tulajdonsg rtkrl tjkoztat hibazenet

  • 40

    Megjegyzs

    Az Alphabetic fln a nv (Name) tulajdonsg nem a nvsor szerinti helyn jelenik meg, hanem a lista elejn.

    A Categorized fln az egyes tulajdonsg csoportok (mint pl. megjelens (Appearance), viselkeds (Behavior)) az elttk megjelen (mnusz, plusz) ikonokkal becsukhatk (egysoross), illetve kinyithatk.

    A tulajdonsgok nevbl ltalban mr kiderl a szerepk, de a tulajdonsg ablakban is l a krnyezetfgg sg, gy az aktulisan kivlasztott tulajdonsg sgjhoz elegend letni az F1

    billentyt.

    Bizonyos tulajdonsgok (pl. BackColor, ForeColor) rtke tbbfle (pl. begpels, vlaszts) mdon is megadhat.

    Csoportos kijells esetn (lsd 3.2.7. fejezet) a Properties ablakban a kijellt vezrlk kzs tulajdonsgai jelennek meg (pl. a Name tulajdonsg ekkor nem lthat), s ezek egyszerre mdosthatk.

    Az ablak tetejn lv legrdl listban olyan vezrl is kivlaszthat, amely nem jelenik meg a formon tervezskor, gy nem tudunk rkattintani (pl. ha vletlenl olyan pozcit (lsd Left, Top tulajdonsgok) adtunk meg, amivel a vezrl lekerlt a formrl).

    Vannak olyan tulajdonsgok, amelyek csak futsi idben rhetk el, s vannak olyanok is, amelyek csak olvashatk (read-only) (pl. ListBox.ListCount).

    A fontosabb tulajdonsgokrl a vizulis formtervezsben (lsd 3.2.7. fejezet) lesz sz.

    3.2.4. A kdszerkeszt ablak

    A kdszerkeszt ablak a VBA forrskdok megrsra, azok mdostsra szolgl. A forrskdok modulokba, azon bell pedig szubrutinokba szervezettek. A kdszerkeszt ablak tetejn kt legrdl lista tallhat, a bal oldaliban az objektumok, a jobb oldaliban a szubrutinok nevei jelennek meg, illetve vlaszthatk ki.

    3.13. bra. A kdszerkeszt ablak

    A listk tartalma egyfell igazodik a kurzor aktulis (forrskdbeli) helyhez, msfell segtsgkkel gyorsan rpozcionlhatunk a modul kvnt rszre. Vlasztskor ltalban elszr a bal oldali listbl, utna a jobb oldalibl vlasztunk, mert a jobb oldali lista tartalma a bal oldali lista aktulis elemhez igazodik.

    A bal oldali listban az els elem mindig egy (General) nev elem. Ha ez az elem van kivlasztva, akkor a jobb oldali listban az els elem egy (Declarations) nev elem (lsd 3.13. bra), a tbbi elem pedig a modulban tal