Heippa!
Minulla on sellainen ongelma, että olen tehnyt Excelin VBA:lla lomakkeen,joka ottaa tietystä taulukon solusta yhden desimaaliluvun, ja sitten syötän siihen toisen luvun, joka laskee tästä taulukossa olevasta luvusta tietyn prosentin (tämä prosenttiluku on kokonaisluku), ja sitten tulos tulee Labeliin. Tämä tietty taulukon luku tulee TextBoxiin ja luku, jonka syötän tulee myös toiseen TextBoxiin. Tässä on koodi, jota olen käyttänyt:
Private Sub CommandButton1_Click()
Range("E27").Select
TextBox1 = Range("E27")
End Sub
Private Sub CommandButton2_Click()
MsgBox "Syötä haluamasi prosenttiluku tyhjään ruutuun!", vbOKOnly
End Sub
Private Sub CommandButton3_Click()
Label1.Caption = TextBox1 * TextBox2 / 100
End Sub
Private Sub CommandButton4_Click()
TextBox2 = " "
End Sub
Private Sub CommandButton5_Click()
If MsgBox("Haluatko lopettaa laskemisen?", vbYesNo vbQuestion, "Lopetus") = vbYes Then
End
End If
End Sub
Ongelma on siinä, että tulos ei tule Labeliin, jos taulukossa oleva luku on desimaaliluku, tulee virheilmoitus: run-time error 13, type mismatch eli tyyppivirhe, mutta kokonaisluvuilla se toimii oikein. Sekin ihmeellisyys tässä vielä on, että tämä toimii -97 Excel versiossa oikein(siis myös desimaaliluvuilla), mutta ei toimi uudemmissa versioissa, se on minusta aika outo juttu? Olen yrittänyt vaikka millaista koodia, että saisin sen toimimaan mutta tuloksetta. Olisin tosi onnellinen jos joku voisi ratkaista minulle tämän ongelman. Kiitän jo etukäteen oikeasta ratkaisusta.
tv.epätoivoinen Minni
Minulla on sellainen ongelma, että olen tehnyt Excelin VBA:lla lomakkeen,joka ottaa tietystä taulukon solusta yhden desimaaliluvun, ja sitten syötän siihen toisen luvun, joka laskee tästä taulukossa olevasta luvusta tietyn prosentin (tämä prosenttiluku on kokonaisluku), ja sitten tulos tulee Labeliin. Tämä tietty taulukon luku tulee TextBoxiin ja luku, jonka syötän tulee myös toiseen TextBoxiin. Tässä on koodi, jota olen käyttänyt:
Private Sub CommandButton1_Click()
Range("E27").Select
TextBox1 = Range("E27")
End Sub
Private Sub CommandButton2_Click()
MsgBox "Syötä haluamasi prosenttiluku tyhjään ruutuun!", vbOKOnly
End Sub
Private Sub CommandButton3_Click()
Label1.Caption = TextBox1 * TextBox2 / 100
End Sub
Private Sub CommandButton4_Click()
TextBox2 = " "
End Sub
Private Sub CommandButton5_Click()
If MsgBox("Haluatko lopettaa laskemisen?", vbYesNo vbQuestion, "Lopetus") = vbYes Then
End
End If
End Sub
Ongelma on siinä, että tulos ei tule Labeliin, jos taulukossa oleva luku on desimaaliluku, tulee virheilmoitus: run-time error 13, type mismatch eli tyyppivirhe, mutta kokonaisluvuilla se toimii oikein. Sekin ihmeellisyys tässä vielä on, että tämä toimii -97 Excel versiossa oikein(siis myös desimaaliluvuilla), mutta ei toimi uudemmissa versioissa, se on minusta aika outo juttu? Olen yrittänyt vaikka millaista koodia, että saisin sen toimimaan mutta tuloksetta. Olisin tosi onnellinen jos joku voisi ratkaista minulle tämän ongelman. Kiitän jo etukäteen oikeasta ratkaisusta.
tv.epätoivoinen Minni
Vastaukset 3
Vanhimmat
Todennäköisesti alkaa toimimaan jos käyt vaihtamassa ohjauspaneelin maa-asetuksista desimaalierottimen Excelin kieliversiota vastaavaksi.
Excel FIN => pilkku
Excel UK => piste
Laskutoimituksissa / palauttaa liukuluvun (desimaalit) kun taas palauttaa kokonaisluvun.
Muista myös muuttaa tekstilabelit numeroiksi.
Eli muuta rivisi
"Label1.Caption = TextBox1 * TextBox2 / 100"
seuraavaksi:
Label1.Caption = val(TextBox1) * val(TextBox2) / 100
Se, ketä desimaaliluvun syöttää, käyttää siinä sitten oikeata desimaalieroitinta, eli pilkkua tai pistettä.
VB:ssä osa kirjastofunktiosta vaatii aina pisteen desimaalierottimeksi, osa taas katsoo erottimen maa-asetuksista.
Tämä on tosi sekava koko systeemi, mutta käsittääkseni val() funktiossa desimaalierottimena pitää käyttää aina pistettä. Eli se ei toimi suomalaisilla asetuksilla, siis pilkun kanssa.
Eli ilman val'ia koodi toimii, kunhan käyttää maa-asetusten mukaista erotinta.