Excel objektumok Az excelben az osztályokat úgynevezett class modulokként hozzuk létre. Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni: View-ba rámegyünk a Properties Windows-ra, majd bejön egy ablak (vagy megjelenik valahol), és ott a Categorized tabfülre megyünk, és ott át tudjuk írni az osztályunk nevét. (Ezt előadáson külön kiemelte!). Képbe ez:
Nézzük meg, miket definiálhatunk egy osztály modulon belül: adattag metódus property konstruktor destruktor Vegyük ezeket végig egy példán keresztül. Definiálni szeretnénk egy Szemely osztályt, amiknek a következő tulajdonságai és műveletei legyen: Nev, Eletkor property, konstruktor egy modosito metódus ami paraméterbe a két mező új értékét várja és egy kiír metódus, ami kapja paraméterként hogy hanyadik oszlopok első cellájába írja ki egymás mellé Miután létrehoztuk a modulunk és átneveztük Szemely-re, elsőként hozzuk létre a property-t. A propertynek van lekérdező (Get) és módosító (Let) változata. Egy mögöttes (általában privát) változóval operálnak a property-k. Pl. a Name property legfeljebb 3 dolgot foglal magába: egy mögöttes privát változó (pl. ez lehet name), egy lekérdező és egy módosító property. Így a Name úgy fog
viselkedni, mint egy változó és nem úgy kell meghívni mint egy függvényt, hanem úgy kell használni, mintha egy mező adattag lenne. Lehetnek csak olvasást engedélyező propertik (ekkor csak ezt írjuk meg, Property Get), lehetnek csak írást (ekkor csak Property Let-et írunk), de mindkettőt is megírhatjuk. Tagfüggvényt úgy kell, mint sima függvényt. Ha nincs visszatérési értéke, akkor csak eljárásról beszélnük (Sub) ha van, akkor Adattagot úgy kell, mintha sima változót deklarálnánk, lehet ugyanúgy Public és Private kulcsszavakat használni (Private, akkor csak az adott osztály érheti el, külsősök csak lekérdező /módosító tagfüggvényekkel, ha biztosítunk ilyet) Nézzünk példát a definiálásra akkor: Property definiálása: Get property: A Property Get kulcsszóval történik, és egy a mögöttes mező típusa a visszatérési érték típusa, tehát úgy kell definálni, mintha egy függvényt definiálnánk, annyi kivétellel, hogy Function kulcsszó helyett Property Get van Private valtozonev As típus Public/Private Property Get Propertyneve() As Visszatérési_típus Propertyneve=valtozonev Lehetnek egyéb műveletek visszatérés előtt, de ez gyakran használt szerkezet. A valtozonev és a Propertyneve között, ha a valtozonev a mögöttes változó,általában a kezdőbetű nagyságában térnek el. Nyílván típus=visszatérési_típus, ha mögöttes változó. Let property: A Property Let kulcsszóval történik a definiálása, olyan mintha egy egyparaméteres sub eljárást definiálnánk szerkezetileg (használat során mutatkozik meg a különbség, mert nem olyan szintaktikával használjuk), annyi hogy Sub helyett Property szerepel.
Private valtozonev As típus Public/Private Property Let Propertyneve(Value As típus) valtozonev=value Itt is lehetnekbelül egyéb műveletek. Private nev As String Private eletkor As Integer Public Property Get Name() As String Name = nev Public Property Let Name(Value As String) nev = Value Public Property Get eletkor() As Integer eletkor = eletkor Public Property Let eletkor(value As Integer) eletkor = Value A konstruktor egy Sub procedúra itt a VBA-ban aminek speciális neve van, az objektum létrehozása után rögtön ő hívódik meg és a kezdeti inicializációs feladatokat ellátja (vagy amit beleírunk). Mi esetünkben tegyük fel, a nevet Nincs -re az életkor-t 10-re állítja.
Konstrukor szerkezete: Private/Public Sub Class_Initialize() //kezdeti értékbeállítások,erőforrások megszerzése stb.. Esetünkben legyen: Private Sub Class_Initialize() Me.Name = "nincs" Me.Eletkor = 10 Itt a Me az az aktuális objektumpéldányra hivatkozik, aminek épp a konstruktora meghívódik (ez olyan mint a this máshol), magyarán mindig arra a példányra hivatkozik a Me, amin az adott művelet végrehajtódik. Csak szemléltesképp van itt, természetesen Me nélkül is menne. És végül a metódusok: Public Sub Modosito(n As String, e As Integer) Nev=n Eletkor=e Public Sub Kiir(i As Integer, j As Integer) Cells(1, i) = Name Cells(1, j) = Eletkor Példa az osztály használatára: Dim vmi As New Szemely vmi.modosito "a", 4 vmi.kiir 1, 2
Létrehozza a Szemely objektumunkat,nem csak deklarálja, mert a New ott van, ha nem lenne ott csak deklaráció lenne és még létre kellene hozni. Dim vmi As Szemely deklaráció Set vmi = new Szemely létrehozás Többi sor világos, a függvény és eljárásnál érvényes hívási szintaktika a jellemző (függvénynél zárójel, eljárásnál vesszővel elválasztás)