Visual Basicissa taulukoiden alustus omilla lähtötiedoilla on aika vaikeaa, koska kielestä puuttuu QBasicista tuttu mahdollisuus kirjoittaa tietoja Data-riveille ja lukea niitä myöhemmin Read-lauseilla. Tällaisen järjestelmän pystyy kuitenkin tekemään melko helposti itse, niin kuin alla olevasta esimerkistä selviää.
Ajatuksena on, että Data-riveille voi kirjoittaa pilkuilla erotettuna kaikenlaista tietoa. Kun tietoa sitten tarvitaan ohjelmassa, sitä voi lukea samassa järjestyksessä Read-lauseilla. Usein taulukko alustetaan tällä tavalla For-silmukassa, jolloin silmukan joka kierroksella haetaan yksi tai useampi Data-riveille laitettu tieto.
Yhdellä Data-rivillä voi olla monta tietoa ja yhdessä Read-lauseessa voi olla monta muuttujaa, minkä vuoksi molemmat aliohjelmat määritellään niin, että niillä on ParamArray-tyyppinen parametri. Tällöin aliohjelmalle voidaan antaa vaihteleva määrä parametreja. Luetut tiedot tallennetaan taulukkoon, ja aina kun taulukon tila loppuu kesken, se kasvatetaan kaksinkertaiseksi.
Data.bas
Option Explicit Private DTiedot() As Variant ' tiedot taulukossa Private DMaara As Long ' tietojen määrä Private DRaja As Long ' taulukon koko Private DKohta As Long ' taulukon lukukohta Public Sub Data(ParamArray tiedot() As Variant) ' taulukon alustus If DMaara = 0 Then ReDim DTiedot(16) DRaja = 16 End If Dim i As Long For i = LBound(tiedot) To UBound(tiedot) ' taulukon laajennus tarvittaessa If DMaara > DRaja Then DRaja = DRaja * 2 ReDim Preserve DTiedot(DRaja) End If ' tiedon lisäys taulukkoon DTiedot(DMaara) = tiedot(i) DMaara = DMaara + 1 Next End Sub Public Sub Read(ParamArray muuttujat() As Variant) Dim i As Long For i = LBound(muuttujat) To UBound(muuttujat) ' QBasic-yhteensopiva virheilmoitus If DKohta = DMaara Then Err.Raise 4, , "Out of Data" Exit Sub End If ' tiedon haku muuttujaan muuttujat(i) = DTiedot(DKohta) DKohta = DKohta + 1 Next End Sub
DataTesti.frm
Option Explicit Private Sub Form_Load() Data "tammi", "helmi", "maalis", "huhti" Data "touko", "kesä", "heinä", "elo" Data "syys", "loka", "marras", "joulu" Dim kuukaudet(1 To 12) As String Dim i As Integer For i = 1 To 12 Read kuukaudet(i) Next MsgBox "Nyt on " & kuukaudet(Month(Now)) & "kuu" End Sub
Kiva :)
Ihan kiva
aika nätti
Aihe on jo aika vanha, joten et voi enää vastata siihen.