Minä olen tehnyt sovelluksen, jossa on seuraavanlaista koodia:
Private Sub Command1_Click() txtYksi = Val(txtToxp) - Val(txtFromxp) txtKaksi = txtYksi / 5 txtKolme = txtYksi / 18 End Sub
Nyt kun yritän muutta noita txtYksi integereiksi = Dim txtYksi as integer, niin ohjelma herjaa, että se ei onnistu, koska se on käytössä.
Yritin myös toista tapaa, jonka Nomic näytti;
dim luku as integer luku = text1.text
Tuokaan tapa ei tulosta tuottanut vaan seuraavaksi oli vuorossa virhe invalid outside procedure. Tietääköhän kukaan miten saisin kyseiset boxit integereiksi?
Yhdistä nuo tavat:
Dim txtYksi As Integer txtYksi = Val(txtToxp) - Val(txtFromxp)
Val palauttaa muistaakseni Integerin.
Siis nuo txtKaksi ja txtKolme pitäisi saada integereinä. Tai jos ei niin, niin miten saa luvut kokonaisluvuiksi?
No voi... Ei voi oikein mitään sanoa. Eikö tuosta nyt tullut idea selväksi? Ensin Dim, sitten laitat sen arvon. Vähän omatoimisuutta.
Dim txtKaksi As Integer Dim txtKolme As Integer txtKaksi = txtYksi \ 5 ' \ on jakolasku kokonaislukuna txtKolme = txtYksi \ 18
Ja Integer = Kokonaisluku, jos et sattunut tietämään.
Tuotakin olen koittanut, se jättää ruudut tyhjiksi ja vähänkin pitemmällä lukujonolla se herjaa overflow. Taitaa olla koodissa nyt jotakin pahasti vialla. Koitan selvittää asiaa.
Int() -funktiolla saadaan luku integeriksi(kokonaisluku). Val() -functio palauttaa merkkijonon lukuna.
txtKaksi = Int(txtKaksi) txtKolme = Int(txtkolme) Luku = Val("23.15") 'paluttaa luvun 23.15
Jos muuttujaa on jo käytetty ei sitä voida enää alustaa uudestaan.
'tämä ei siis toimi a = 10 * 20 Dim a As Integer
Tuo errori "Invalid outside procedure" tulee koska osa koodista ei ole minkään subin tai funktion sisällä
kakka = 20 'tämä on väärässä paikassa Private Sub Form_Load() 'koodia End Sub
Ja se overflow tarkoittaa sitä, että yrität laittaa siihen integer muuttujaan liian isoa arvoa. integeriin mahtuu luvut väliltä n. -65000 - 65000 (en nyt muista mitään tarkkoja arvoja). Jos tarvitset suurempia lukuarvoja, niin integeriä suurempia ovat long, single ja double (ko. ovat tuossa suuruusjärjestyksessä).
tuomas kirjoitti:
integeriin mahtuu luvut väliltä n. -65000 - 65000 (en nyt muista mitään tarkkoja arvoja)
Muistat hieman väärin, alaraja on näet -32768 ja yläraja on 32767. Muiden muuttujatyyppien arvoalueet voi tarkistaa vaikkapa VB-oppaasta.
Aihe on jo aika vanha, joten et voi enää vastata siihen.