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 Function
Kuten 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 Sub
Kuten 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 Sub
Kä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.