VBA:n tietotyyppi ongelma

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
3418
Äänestä

Muut lukivat myös

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.

Äänestä
  • 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ä.

    Äänestä

  • 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.

    Äänestä

Kommentoi aloitusta


Minni kirjoitti:

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

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu