Voiko funktiolle määrittää useamman ulostulevan muuttujan, että saisi yhdellä funktiokutsulla haettua useamman tarvittavan arvon? Jos voi, miten funktio määritellään? Esimerkki olisi hyvä...
Saakos sub:n palauttamaan arvoja?
ei mun tietääkseni. Ja subi on functio joka ei palauta mitään. Jos haluat subin palauttamaan jotain ni teet vaan samanlaisen function.
Tässä on esimerkki, joka toimii ainakin VB6:ssa.
Private Type TIEDOT eka As Integer toka As Long kolmas As String End Type 'oman tietotyypin palauttaminen Private Function MoniPalautus1() As TIEDOT Dim palautus As TIEDOT palautus.eka = 12 palautus.toka = 837634 palautus.kolmas = "testi" MoniPalautus1 = palautus End Function 'taulukon palauttaminen Private Function MoniPalautus2() As Variant Dim palautus(3) As Variant palautus(0) = 4 palautus(1) = 63 palautus(2) = 18 palautus(3) = 55 'tai: palautus = Array(4, 63, 18, 55) MoniPalautus2 = palautus End Function Sub Form_Load() Dim tiedot1 As TIEDOT Dim tiedot2() As Variant tiedot1 = MoniPalautus1 tiedot2 = MoniPalautus2 MsgBox tiedot1.toka '837634 MsgBox tiedot2(1) ' 63 End Sub
Huomaa, että tietotyypin palauttavan funktion täytyy olla paikallinen (Private) ja taulukon palauttavassa funktiossa taulukon tyypin täytyy olla Variant.
Hyvä. Kiitos vinkeistä!
Jos function tai aliohjelman parametrit varustaa ByRef määreellä (oletus vb6) niin tällöin välitetään vain osoitin muuttujaan (pointteri), jolloin kaikki parametriin tehdyt muutokset heijastuvat myös kutsukohtaan, eli pieni esimerkki:
' Tässä aliohjemassa luodaan kaksi muuttujaa, jotka lähetetään ' aliohjelmalle, jonka parametrit on ByRef (by reference) määreellä. ' Aliohjelma (OmaViitaus) sijoittaa muuttujiin arvot ja ne heijastuvat ' kutsukohdan muuttujiin Private Sub Kutsuja() Dim strNimi As String Dim iIka As Integer ' käydään "täyttämässä" muuttujat OmaViittaus strNimi, iIka ' tulostetaan muuttujien arvot Debug.Print strNimi & "," & iIka End Sub Private Sub OmaViittaus(ByRef strNimi As String, ByRef iIka As Integer) strNimi = "Matti Meikäläinen" iIka = 60 End Sub
Taulukot, oliot, tyypit ja komponentit (esim. ComboBox) menevät aina referenssinä.
Eli vastaus siihen voiko functiolle/sub määrätä useamman kuin yhden ulostulevan arvon niin vastaus on: kyllä.
Luettavuuden ja ylläpidettävyyden kannalta yllä oleva esimerkki ei ole hyvä. Parempi olisi tehdä OmaViittaus subista functio. Functio palauttaisi esim. Collection, joka sisältäisi pyydetyt arvot.
Aihe on jo aika vanha, joten et voi enää vastata siihen.