You are on page 1of 4

Programozási 1x1 1

Csak a 10-100 éves felhasználóknak ajánlott!


Címszavakban

Visual Basic
• Visual Basic egyszerűen
• Programozási környezetek
• Egyszerű függvények
• Programvezérlő utasítások
Programozási alapok I. • Könnyű mintapéldák

A Microsoft Visual Basic programozási nyelv alapjaival már bárki ismerkedhet, mert egyre több Microsoft
alkalmazásból elérhető. Az Internet Explorer 4-es változatának telepítése után már a Windows 95 felhasz-
nálók is elkezdhetnek ismerkedni a VBScript programok készítésével, de a Microsoft Office 97 birtokában
már egy kényelmes fejlesztőkörnyezet is a rendelkezésünkre áll. Akkor miért ne próbáljuk ki?
A számítógépek hőskorának számító 80- Ez csak akkor áll a rendelkezésünkre, ha vagy annak valamelyik alkalmazását te-
as években a mikroszámítógépeken is a telepítettük az Internet Explorer 4-es / 5-ös lepítette. Ebben az esetben ugyanis ren-
Basic programozási nyelven progra- változatát, vagy a Windows 98-at, vagy delkezik a Visual Basic programok fut-
moztunk, amelyet a PC-knél a DOS-ban az Office 2000-et (az IE 5-tel). Ebben az tatásához egy nagyon jó környezettel,
a QBasic nyelven lehetett folytatni. Ott esetben megnézhetjük a C:\Windows\ ami valószínűleg eddig is megtalálható
azonban például a Turbo Pascal vagy a Samples\Wsh mappa tartalmát, amely volt az Ön gépén, de még soha nem in-
Clipper nyelvek sokkal több szolgálta- tartalmaz néhány mintaprogramot, illet- dította el. Indítsa el például a Wordöt
tást nyújtottak, így a Basic nyelv, úgy ve a C:\Windows mappában megtalál- (97-es vagy a 2000-es változatot), és
érzem, kicsit háttérbe szorult. juk a programok futtatásához szükséges nyomja meg az Alt+F11-et. Ekkor elindul
Most azonban ismét egyre több helyről WSCRIPT.EXE programot. az alábbi képen is látható program,
érhető el a Basic, ráadásul sokkal izgal- Jobb esetben van egy programozási kör- amely a felsorolt szolgáltatásokkal ren-
masabb alternatívát kínál, mint hajdanán nyezetünk, ahol a forrásprogramot nem- delkezik.
a konkurens hódítók. Aki nem készített csak beírhatjuk, de kapunk hozzá súgót, A továbbiakban rátérünk a programok
még egy egyszerű programot sem, annak azonnali segítséget, színes megjelenítést ismertetésére, amelyeket mind itt, mind
egy windowsos ablak vagy csak egy (ami a beírásoknál nagy segítség) stb. A a Jegyzettömbben beírhatunk. Futtatni a
párbeszédablak megjelenítése is miszti- programot ilyenkor akár lépésenként is Windowsban (*.vbs) vagy – a Visual
kusnak tűnik. futtathatjuk, ami a hibakeresésnél nagy Basicnél – ott helyben lehet. Néhol van
Ha azonban Ön most legyőzi félelmét, és segítség. Ezek pedig már Önnél is meg- minimális eltérés, de arra a forrásprog-
az itt közölt kis programokat beírja, ki- találhatók, ha legalább az Office 97-et ramban lévő megjegyzés figyelmeztet.
próbálja, és egyénileg módosítani meri
az egyes paramétereket, akkor biztosít-
hatom, hogy a sikerélmény nem marad
el. Ezek után már csak arra van szükség,
hogy egyéni kíváncsiságától hajtva to-
vább folytassa az ismerkedést a progra-
mozással, és olyan egyéni feladatokat
találjon ki, amelyek a saját munkájával
kapcsolatosak, így a programja a haszná-
ra is válik.

Programozási környezetek
A programozás általában kétféle módon
valósítható meg olyan esetben, amikor a
beírt forrásprogramot futtatjuk. Egyszerű
esetben egy karakteres szövegszerkesztő
segítségével (Jegyzettömb) beírjuk például
az itt közölt programokat, majd azt elment-
jük VBS-kiterjesztéssel, amelyhez alap-
értelmezésben tartozik egy futtatóprog-
ram, így azt egy Enterrel elindíthatjuk. 1. ábra: Programozási környezet tucatnyi segítséggel az Office 2000-ben.

www.moricznet.hu
2 Programozási 1x1

Most az előzőek ismeretében vizsgáljuk ablakba írjuk be a forrásprogramot, majd A nevét általában úgy választjuk meg,
meg, hogy melyik programozási lehetőség a Sub és az End Sub között állva a kur- hogy utaljon a felhasználás módjára
áll a rendelkezésünkre. Ha van 97-es vagy zorral kattintsunk az eszköztár Run Sub (ezek x;y koordináták lesznek).
újabb Microsoft Word vagy más Office al- (F5) gombjára, vagy nyomjuk meg az A „Cimsor” nevű változóba viszont egy
kalmazás a számítógépünkön, akkor azt F5 billentyűt a programunk indításához. idézőjelek között megadott karakterlán-
indítsuk el, majd nyomjuk meg az Alt+F11 Ekkor megjelenik az első párbeszédablak cot adunk meg, amit valahol változatlan
billentyűkombinációt, mire elindul a (2. ábra), amely bemenő adatot vár. Mi- formában szeretnénk viszontlátni.
Microsoft Visual Basic programozási kör- vel adtunk neki egy alapértelmezett érté- Az „Alapert” változó értékének megadá-
nyezet (lásd Eszközök / Makró / Visual ket, ezért elég csak az Entert megnyomni. sakor már felhasználjuk a „Cimsor” tar-
Basic…). Ha ez nem áll a rendelkezé- talmát, majd a plusz jellel hozzáadunk
sünkre, de van Microsoft Internet Explorer egy másik karakterláncot. Utána hozzá-
4 vagy 5 telepítve a számítógépünkre, kapcsoljuk még a Now függvény ered-
akkor nézzük meg a „C:\Windows\ ményét is, ami a napi dátumot és a pon-
Samples\Wsh” mappa tartalmát, és tos időt adja meg, de annak a típusa nem
Enterrel indítsunk el próbaképpen egy- karakterlánc (String), nem azonos típu-
két VBS-kiterjesztésű programot. Ha súak, ezért nem adhatók össze. Ha azon-
2. ábra: Adatokat írhatunk be a billentyűze-
azok elindulnak, lefutnak, akkor nyu- ten keresztül, amit a programunk majd fel- ban az „&” jelet használjuk, akkor az
godtan írhatjuk a saját programjainkat is dolgoz (IE 5 - VBS). összeadás elvégezhető, mert a típus-
(azokat a saját mappánkba is tehetjük). egyeztetést a futtató elvégzi.
Utána jelenik meg a második párbeszéd- Az „Uzenet” változó értékadásánál lát-
Az első programunk ablakunk (3. ábra), amely egy többsoros hatunk a sor végén egy aláhúzás jelet,
Ha a Jegyzettömböt használjuk, akkor üzenetet jelenít meg ikonnal és egyéni- ami azt jelenti, hogy nem akarom a sort
írjuk be az 1. példát, majd mentsük el azt leg megválasztható gombokkal. nagyon hosszan írni, így a további ré-
a saját mappánkba VBS-kiterjesztéssel. szeket a következő sorban folytatom. E
Utána a mappánkban Enterrel indítsuk nélkül a következő sor már egy új utasí-
el, mire a következő két párbeszédablak tásnak felelne meg, ami ebben az eset-
jelenik meg. A 2. ábrán lévő üzenet je- ben hibás lenne. Érdekesség még a
lenik meg először, és ha nincs kedvünk „vbCrLf” változó is, amelynek megadása
mást beírni, akkor az alapértelmezett itt nem látható, mégis használjuk. Ennek
szöveget elfogadva nyomjunk Entert, 3. ábra: Többsoros szöveg megjelenítése oka egyszerű. A programunk futásakor
mire megjelenik egy üzenetablak ikonnal ikonnal és választható gombbal (IE 5 - VBS). nagyon sok olyan változót kap értékkel
és rendszerhang kíséretében (3. ábra). együtt, amelyre szüksége lehet. Ezekre
Ha a Visual Basic adta kényelmes de A program értelmezése elég csak hivatkozni a programban. (A
bonyolultabb környezet is a rendelkezé-
Ha a Jegyzettömbben írtuk be a progra- “vbCrLf” = Carriage Return Line Feed,
sünkre áll, akkor kattintsunk a bal olda-
mot, és VBScript programként futtatjuk, egy sortörésnek – Enternek – felel meg,
lon a Normal sablon nevére, majd vá- akkor a Call utasítással meg kell hívnunk ami a többsoros kiíráshoz kell.)
lasszuk ki a Beszúrás / Modul parancsot.
az alprogramot (szubrutint), mert külön-
Ekkor kapunk a jobb oldali részen egy új
ben nem hajtana végre semmit. Most következik az első érdemi utasítá-
üres ablakot, ahová a forrásprogramotA programunkat mindkét esetben írhat- sunk, ami valójában egy függvény. Az
beírhatjuk. Egy ilyen ablakba több tuk volna Sub - End Sub - Call nélkül InputBox() függvény megjeleníti az
alprogram is beírható (Sub, Function …),
is, de így könnyebb lesz elhatárolni a többi üzenetet egy általunk megadott címsorú
és amelyiken állunk éppen azt futtathatjuk
példától, és nem kell mindig új modult párbeszédablakban, a megadott helyen
(ha az egy Sub - alprogram). Ebbe az (vagy VBS-fájlt) létrehozni. (x,y) a megadott alapértelmezett értékkel
Utána több egyszerű ér- (Alapert). Azért függvény, mert kapunk
1. példa: Játék az üzenetablakokkal tékadás történik. Ilyenkor egy értéket a felhasználótól, amit majd
megadjuk a változó nevét, feldolgozunk, hiszen az a célunk. A má-
Call Uzenetek(): ’Csak VBScript esetén kell
amelyben változó adato- sik érdemi utasításunk az MsgBox,
'********************************************** kat tárolhatunk, az amelyik egy üzenetet jelenít meg. Az
Sub Uzenetek()
x = 5000: y = 1000 egyenlőségjelet, és annak üzenet a „Kiir” változóban van, a máso-
Cimsor = "Programozási 1x1" jobb oldalára azt az érté- dik paraméter határozza meg a gombot
Alapert = Cimsor + " - " & Now
Uzenet = "Írjon be egy vagy több szót !" _ ket, amelyet el akarunk és az ikont, míg a „Cimsor” változóban a
+ vbCrLf + "Használhatja a vágólapot is." helyezni benne. címsorba kerülő szöveg található.
Szo = InputBox(Uzenet, Cimsor, Alapert, x, y) Nézzük például az első Ha a programjaink során bármikor egy
Kiir = "Az eredeti:" + Szo + vbCrLf + _ kettőt. Az x nevű változó- változó értékét tudni szeretnénk, akkor
" és ismét: " + Szo ba beleteszünk 5 000-et, az tegyünk be oda egy MsgBox neve uta-
MsgBox Kiir, vbOKOnly + vbInformation, Cimsor
End Sub y nevűbe pedig 1 000-et. sítást, csak ezzel az egy paraméterrel.

www.moricznet.hu
Programozási 1x1 3

A ciklusok használata Utána bővítsük ki a kis 2. példa: Ismétlés a ciklusban


Ciklusokat akkor használunk, amikor egy programunkat úgy, hogy
For i = 1 To Len(Szo)
vagy több műveletet többször egymás megadunk egy karakterlán- UjSzo = Mid(Szo, i, 1) + UjSzo
után meg kell ismételni. Attól függően, cot, és annak betűit kiíratjuk Next: ‘Lásd a szövegben!
hogy ismerjük-e az ismétlés számát, egyesével. Kiir = "Az eredeti: " + Szo + vbCrLf + _
"és fordítva: " + UjSzo + vbCrLf
használhatunk számlálós ciklust (For -
Next), vagy feltételtől függő ciklusokat Például: ForNext.vbs
(Do – Loop; While– Wend), amelyeknél A = "Attila"
vagy elöl vagy hátul tesztelünk egy vál- For m=1 To 6
tozót vagy egy függvényt, és annak érté- MsgBox Mid(A,m,1)
kétől tesszük függővé a ciklus végrehaj- Next
tását vagy az abból való kilépést. Ezeket (Visual Basicben tegyük be
4. ábra: A szöveg eredeti és fordított formában (IE 4 - VBS).
az utasításokat majd folyamatosan, a Sub Prg() – End Sub közé.)
különböző függvények bemutatásakor Ebben a pici példában előre tudjuk, hogy eltároljuk az eredményt, esetleg további
fogjuk megismerni. az „Attila” 6 karakterből áll, ezért a ciklust részeket adunk hozzá. Fontos, hogy a fel-
A 2. példa nem egy önálló program, ha- is pontosan egytől hatig futtatjuk. Ha azon- sorolt függvényeket egyesével próbáljuk
nem az előző programba kell beilleszteni, ban az 1-2. példát nézzük, akkor ott a ki, és szerencsés esetben az itt közölt
az MsgBox utasítás elé, esetleg az ottani „Szo” változóban kapjuk meg a felhasz- eredményeket kapjuk. Változtassuk meg
„Kiir” értékadás helyett, hiszen úgyis nálótól azt a karakterláncot, amit meg a paramétereket, és nézzük meg a kapott
felülírjuk annak értékét. kell fordítanunk. A hosszát sem tudjuk eredményeket. Játsszunk velük bátran!
Ciklust úgy kell készíteni, hogy a For előre, ezért azt a programban le kell mérni.
Hasznos függvények
kulcsszó után megadunk egy ciklusvál- Erre szolgált a Len() függvény, ami visz-
Left(“Attila”, 3) ---------------------- “Att”
tozót és annak a kezdőértékét (i=1), szaad egy értéket, és ez adja meg a ciklus
Right(“Attila”, 3) --------------------- “ila”
majd a To kulcsszó után a végértéket. Itt a végét.
Mid(“Attila”, 2,3) ---------------------- “tti”
„Szo” változóban lévő karakterlánc Az előző kis példákhoz hasonlóan érde-
Space(6) --------------- “ “ = 6 szóköz
hosszát (Len – length - hossz) adjuk mes a karakterláncok összeadásával is
String(6,“A”) ---------------- “AAAAAA”
meg, mert minden egyes karakterét meg eljátszani egy kicsit. Tetszőleges módon
Len(“AAAAAA”) -------------------------- 6
akarjuk vizsgálni, tehát tudnunk kell összekapcsolhatunk szavakat, és az ered-
LCase(“Attila”) ------------------- “attila”
hány darabból áll. A ciklus végét a Next ményt pedig az MsgBox utasítás fogja
UCase(“Attila”) --------------- “ATTILA”
utasítással zárjuk le, ahol megadhatjuk a megmutatni nekünk.
InStr(“Attila”,”i”) ------------------------- 4
ciklusváltozó nevét is (általában illik InStr(3,“Attila”,”A”,1) ------------------- 6
megadni), de a VBScript végrehajtásnál Például: Irogatok.vbs
erre hibaüzenetet kapunk. MsgBox “Ma ”+”van: ” & Now
Str(66.05) -------------------------- “ 66.05”
A kettő közé kerülnek azok a műveletek, Val(“–66.0500”) ------------------- –66,05
amelyeket többször meg kell ismételni. További függvények Chr(65) ----------------------------------- “A”
Itt például a Mid() függvénnyel kieme- A programozási nyelvvel való ismerke- Asc(“A”) ----------------------------------- 65
lünk a „Szo” változóból az i-ediktől egy dést úgy tudjuk felgyorsítani, hogy az itt Trim(“ 35 “) ------------------------ “35”
karaktert, majd mögéírjuk a már meglé- közölt hasznos függvényeket kipróbáljuk.
vő karaktereket. Így a karakterlánc meg- Ehhez nem kell mást tenni, mint készíte- Date() ------------------------ “1999.10.14”
fordul, amit az „UjSzo” változóba táro- ni egy olyan programot, ami csak egy Time() -------------------------- “10:14:29”
lunk el. Ha minden leemelésnél (Mid) MsgBox utasítást tartalmaz mögötte a Now() ----------- “1999.10.14 10:14:29”
kiírnánk valahová a kimásolt karaktert, kipróbálandó függvénnyel. (Ne felejtsük Weekday(Now) ------------------------ 1…7
akkor betűnként leírnánk a megadott el az itt közölt kis programkákat Visual ahol 1=Vasárnap
szöveget. Utána átmásoljuk formázva a Basicben – Office-nál – Sub Progi() és Year(Now) ----------------------------- 1999
„Kiir” karakterláncba az eredeti és az új End Sub közé tenni, és úgy futtatni.) Month( d ), Day( d ), Hour( d ), Minute( d ),
karakterláncot is, amit az 1. példaprog- Second( d ), -------------(értelemszerűen)
ramban lévő MsgBox utasítás kiír egy pár- Például: Fuggveny.vbs WeekdayName(1) ----- “vasárnap” …
beszédablakban (4. ábra). MsgBox Left(“Attila”, 3) (Csak Office 97-ben nem)
A ciklusok jobb megismerésére írjunk be WeekdayName(Weekday(Now)) -------
egy egyszerű ciklust, és abban csak egy vagy például: Fuggveny.vbs A mai nap neve (magyarul).
MsgBox utasítás legyen, ami kiírja a pld = Left(“Attila”, 3) + ”<<<” DateValue(#1945,04,04#) ------------ Az
ciklusváltozó értékét. Íme egy egysoros MsgBox pld 1899.12.30-a óta eltelt napok száma
program. DateValue(Now) -- A kettő különbsége
Az elsőnél a Left() függvény eredményét az életkorunk napokban.
Például: ForNext.vbs azonnal kiíratjuk az MsgBox utasítással, TimeValue(Now)*1 -------- A fenti logika
For k=1 To 5: MsgBox k: Next míg a másodiknál előbb egy változóban alapján, de 12:00:00 => 0.5

www.moricznet.hu
4 Programozási 1x1

Saját függvény készítése A saját függvényünkben 3. példa: Saját függvény paraméterrel


Már az előző programokban is láthattunk más függvények eredmé- Call MoriczPrg(): 'Csak VBScript esetén kell
mintát arra, hogyan néz ki egy függvény. nyeit is felhasználjuk. Sub MoriczPrg()
Például a h = Len(“PC”) utasításban a Mivel napokról van szó, For n = 0 To 8
Len() függvény a karakterlánc hosszát (2) ezért több dátumkezelő MsgBox Napok(n), n, "PC World"
Next
adja meg, és azt tesszük bele a „h” vál- függvényt is megismer- End Sub
tozóba. Mondhatjuk azt is, hogy például hetünk. A nevükből álta-
Function Napok(sz)
h=Sqr(36), és az eredménye 6 lesz, lában ki lehet találni, hogy Select Case sz
mert az Sqr() függvény a szám négyzet- mire valók (Now = Most). Case 0
gyökét (Square root) adja meg. A függvények általában CaseNap = WeekdayName(Weekday(Now))
1,2,3,4,5,6,7
A 3. példában mi is készítünk egy saját adatokat is szoktak kapni. Nap = WeekdayName(sz)
Napok() függvényt, ami a paraméterül Itt mi az „sz” változóba Case Else
For i = 1 To 7
kapott számnak megfelelő nap nevét adja veszünk át egy értéket, TobbNap = TobbNap + CStr(i) + " - " + _
vissza. Ha nullát adunk meg, akkor a amit a Select Case utasí- WeekdayName(i) + vbCrLf
Next
mai nap nevét kapjuk meg, ha pedig hét- tásnál és a String() függ- Nap = TobbNap
nél nagyobb számot adunk meg, akkor vénynél használunk fel. End Select
= String(sz, "@") + vbCrLf + Nap + vbCrLf
az már nincs értelmezve, így a függvény Ezért a függvényünket is Napok
End Function
visszaadja az összes nap nevét. úgy kell meghívni, hogy
A függvényünk tesztelésére kell egy egy számot adunk át neki. Most ilyen szempontból nézzük meg a
program. Ebben kicsit felgyorsítjuk a Például: Napok() függvényünket is. Kap egy érté-
tesztelés menetét, és egy ciklusba ágyaz- MsgBox Napok(0) ket, amit mi a már leírt módon értelme-
zuk a függvény lekérdezését. Így kilenc n = 1: MsgBox Napok(n) zünk. Nulla esetén a „mai” nap nevét adja
üzenetablakot kapunk egymás után, és vissza, tehát használjuk a Now függvényt,
megnézhetjük, hogy melyik értékre, mit Válogatás egy érték alapján ami alapján a Weekday() megadja, hogy a
kapunk. Külön csemegének számít, hogy Egyszerű megoldást kínál a Visual Basic hét hányadik napján vagyunk, és a
az MsgBox utasítás 2. paraméterénél arra az esetre, ha egy változó értékétől WeekdayName() adja meg a nevét. Ez
megadható számokat is egyúttal tesztel- függően más és más műveletet, esetleg nem áll rendelkezésre az Office 97-ben, de
jük, és minden „napra”, más gombokkal műveletsort kell végrehajtani. Ilyenkor az IE 4-ben VBScript futtatásnál már igen.
jelenik meg a párbeszédablak. ugyanis többször meg kell vizsgálni a A függvényből való kilépés előtt meg kell
változó értékét, és ha egyezést talál, ak- adnunk a kilépési értéket. Itt egy formá-
A függvénynek az a lényege, hogy fel- kor a megadott műveletet végrehajtja. zott sort adunk eredményül, amelynél a
építésükben azonosak a szubrutinokkal String() függvényt is teszteljük egyben.
(Sub), de kell egy olyan változónak is Lássunk egy egyszerű példát: A MoriczPrg() indításakor kilenc párbe-
értéket adni, ami a függvény nevével Sub Teszt() szédablakot kapunk, amelyekből kettőt
azonos. Ugyanis így ad vissza értéket a mit = 3 az alábbi ábra mutat.
függvényünk. Ha ez elmarad, akkor soha Select Case mit
nem ad vissza semmit, és csak úgy mű- Case 0
ködik, mint egy szubrutin. MsgBox “nulla”
Case 1 To 9
Például: MsgBox “1 és 9 között van”
Function Bal(A,n) Case Else
Bal = Left(A, n) MsgBox “Nincs 0 és 10 között”
End Function End Case
‘ Itt folytatódik tovább...
5. ábra: Egyszerű üzeneteink változó gom-
Használata: End Sub
bokkal (IE 4 - VBS).
MsgBox Bal(“Attila”,4)
Futtassuk le a programot, ami a „mit” vál- Végezetül itt a hiányzó WeekdayName()
Ezzel most készítettünk egy saját Bal() tozó értékétől függően mindig csak egy függvény, az Office 97 felhasználóknak:
függvényt, amely a karakterlánc bal ol- Case-ágat fog végrehajtani. Az első Function WeekdayName(sz)
daláról n db karaktert lemásol, és vissza- esetben a 3 miatt a „Case 1 To 9” utáni Dim Nap(7)
ad. Ezt az eredményt betehetnénk egy utasítást hajtja végre, majd átugorja az Nap(1) = "vasárnap"
összes többi részt, és az End Case után ‘ Ön ide írja be a hiányzókat, h, k, sze...
változóba, de mi kiírattuk az MsgBox Nap(7) = "szombat"
utasítással. Ugyanígy elkészíthetjük a folytatódik a program futása. Tehát ez WeekdayName = Nap(sz)
Jobb(), a Kozepe() vagy a Hossza() azt biztosítja, hogy mindig csak egy ág End Function
függvényeket is a Right(), Mid(), Len() hajtódjon végre. Utána módosítsuk a
Móricz Attila
függvények felhasználásával. „mit” értékét, és figyeljük meg a változást.
www.moricznet.hu

www.moricznet.hu

You might also like