Etusivu Aloitus Kontrollit Metodit Muuttujat Ohjausrakenteet Silmukat Matematiikka Debuggaus Virheenkäsittely Vuorovaikutus Valikot Tiedostonkäsittely Ikkunat Leikepöytä Drag and Drop Tiedostopäätteet Linkkejä Harjoitukset
Private Function laskeYhteen(ByVal luku1 As Double, luku2 As Double) As Double laskeYhteen = luku1 + luku2 End FunctionKuten huomaat, funktiolla on aina paluuarvo. Funktion paluuarvo palautetaan siten, että ohjelmakoodiin kirjoitetaan funktion nimi (laskeYhteen) ja sille annetaan jokin arvo (laskeYhteen = luku1 + luku 2), esimerkissämme funktion paluuarvoksi tulee siis parametrinä annettujen lukujen summa.
Private Sub tulosta(ByRef luku As Double) msgobx "Luku on " & luku End SubKuten huomaat, erona funktioon aliohjelmassa EI ole paluuarvoa, muuten aliohjelma ja funktio ovat yhteneväisiä.
Dim Vastaus As Double Vastaus = laskeYhteen(1, 2)Eli kutsumme esimerkissämme funktiota laskeYhteen arvoilla 1 ja 2, laitamme paluuarvon talteen muuttujaan Vastaus, joka on Double -tyyppinen (eli samantyyppinen kuin funktion paluuarvo). Toki voimme kutsua funktiota myös seuraavasti:
laskeYhteen 1, 2Ainoa ongelma tässä on se, että emme tiedä mikä on funktion paluuarvo!
Aliohjelmaa voidaan kutsua kahdella eri tavalla. Alla olevassa ohjelmakoodissa on esitelty molemmat tavat:
' Tapa yksi Call tulosta(Vastaus) ' Tapa kaksi tulosta VastausEnsimmäisessä tavassa kirjoitamme komennon Call ja sen jälkeen aliohjelman nimen ja loppuun mahdolliset parametrit sulkujen sisään. Parametrinä meillä on edellisen esimerkin funktiokutsun paluuarvo. Toisessa tavassa "unohdamme" Call -sanan ja kirjoitamme aliohjelman nimen ja sen perään mahdolliset parametrit ilman sulkuja. Huom! Jos parametrejä olisi enemmän kuin yksi, tulisivat ne aliohjelma/funktio -kutsun perään pilkulla eroteltuina.
Vastaavasti jos määrittelemme funktion/aliohjelman julkiseksi (Public), voimme kutsua em. funktiota/aliohjelmaa mistäpäin projektia tahansa.
Private Sub Command1_Click() Dim x1 As Long Dim x2 As Long x1 = 100 x2 = 100 muutaArvoja x1, x2 MsgBox "x1=" & x1 & ", x2=" & x2 End Sub Private Sub muutaArvoja(ByVal Parametri1 As Long, ByRef Parametri2 As Long) ' Vähennetään parametrinä tulleen kopioparametrin tiedon arvosta 1 Parametri1 = Parametri1 - 1 ' Vähennetään parametrinä tulleen kopioparametrin tiedon arvosta 1 Parametri2 = Parametri2 - 1 MsgBox "Parametri1=" & Parametri1 & ", Parametri2=" & Parametri2 End SubKäydäänpäs esimerkkiä läpi niin ymmärrämme eron kopio- ja viittausparametrien välillä. Painikkeen Click -tapahtumassa meillä on ohjelmakoodi, joka määrittelee ensin kaksi muuttujaa, x1 ja x2. Muuttujat alustetaan arvolla 100. Tämän jälkeen kutsutaan muutaArvoja -aliohjelmaa kahdella parametrillä, x1 ja x2. Ensimmäinen parametri on kopioparametri, toinen viittausparametri. Aliohjelmassa muutamme kummankin parametrin arvoa (vähennämme parametrin arvoa yhdellä). Tulostamme parametrien arvon aliohjelmassa. Tämän jälkeen ohjelmakoodin suoritus palaa takaisin aliohjelmakutsua edeltäneeseen paikkaan, jossa tulostamme parametriksi antamiemme muuttujien arvot. Nyt huomaamme, että kopioparametrin arvo pysyi samana, koska aliohjelma muutti kopion arvoa. Viittausparametriksi annetun muuttujan arvo muuttui, koska aliohjelma muutti parametrin alkuperäisen muuttujan arvoa.