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
VBA:n tietotyyppi ongelma
3
383
Vastaukset
- Bill Gates
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.- Petri_Petri
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ä. - huttunen
Petri_Petri kirjoitti:
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.
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
- 1006524
Nikkalassa vauhdilla nokka kohti taivasta
Mitähän Darwin sanoisi näistä 4 suomalaisesta, jotka kävivät Haparandan puolella näyttämässä, kuinka Suomi auto kulkee t313900törniöläiset kaaharit haaparannassa
isäpapan autolla kaahatta 270 km/h metsään https://www.lapinkansa.fi/nsd-kaksi-suomalaista-kuoli-kolarissa-haaparannall/303315Sitä saa mitä tilaa Perussuomalaiset!
https://yle.fi/a/74-20160212 SDP:n kannatus se vain nousee ja Keskusta on kolmantena. Kokoomus saanut pienen osan persu3811792- 331408
- 271350
Eelin, 20, itsemurhakirje - Suomalaisen terveydenhuollon virhe maksoi nuoren elämän
Yksikin mielenterveysongelmien takia menetetty nuori on liikaa. Masennusta sairastava Eeli Syrjälä, 20, ehti asua ensi471053Anteeksi kulta
En oo jaksanut pahemmin kirjoitella, kun oo ollut tosi väsynyt. Mut ikävä on mieletön ja haluisin kuiskata korvaasi, hyv11986Perttu Sirviö laukoo täydestä tuutista - Farmi Suomi -kisaajista kovaa tekstiä "Pari mätää munaa..."
Ohhoh, Farmilla tunteet alkaa käydä kuumana, kun julkkiksia tippuu jaksosta toiseen! Varo sisältöpaljastuksia: https:11920- 42889