Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VBA: Numeerinen muuttuja tekstinä, VB

Kia [22.01.2004 13:44:24]

#

Minulle on parikin kertaa käynyt näin, että numeeriseksi tarkoitetun muuttujan arvo onkin tekstiä tms. Olen koodannut hyvin yksinkertaisia pätkiä Excelin VBscriptillä. Tässä tarkemmat tiedot

Esim.
dim a, b, c as double
a = txtLuku1.value '= 3
b = txtLuku2.value '= 5
c= a + b
msgbox c ' näyttää 35 eikä summaa 8

Tämä on toistunut joskus myös päiväysten kanssa, mutta muistaakseni silloin noilla Dim -jutuilla olen saanut homman toimimaan.

Huomaan tuon errorin esim. jos koodin loppuun tekee tahallaan virheen ja käy kurkkimassa, mikä arvo milläkin muuttujalla on. Tällöin VBscript editori ilmaisee väärässä muodossa olevan arvon lainausmerkkien sisällä esim. "3". Tällaisia arvoja se ei osaa laskea ainakaan + ja - merkeillä. Olen kiertänyt ongelman siten, että olen jakanut muuttujan 1:llä ja antanut sille näin uuden arvon. Tällöin ""-merkit poistuvat ja laskutoimitukset onnistuvat.

Missähän on vika, kun muuttujan tyypistä huolimatta VB käsittelee numeroita kirjaimina?

Antti Laaksonen [22.01.2004 14:53:46]

#

Dim-lauseessa jokaisen muuttujan tyyppi täytyy määrittää erikseen. Koodissasi oleva määritys tarkoittaa sitä, että a ja b ovat Variant-tyyppisiä muuttujia ja vain c on Double-tyyppinen. Kun Variant-tyyppiseen muuttujaan laitetaan merkkijono, se mukautuu String-tyyppiseksi. Ratkaisu on kirjoittaa muuttujamäärittelyt näin:

Dim a As Double, b As Double, c As Double

Tai vaihtoehtoisesti muuttaa merkkijonot Double-muotoisiksi sijoitusvaiheessa:

a = CDbl(txtLuku1.Value)
b = CDbl(txtLuku2.Value)

Createman [22.01.2004 15:18:48]

#

Noin minäkin ajattelin, että jokainen muuttuja täytyy määrittää erikseen. ATK-ope ei osannut =p

Kia [22.01.2004 15:48:37]

#

Kiitoksia paljon vastauksesta, Antti!
Vielä kysyisin, mitä tuo "CDb1" tarkoittaa/mistä se tulee? Onko joku yleisnimitys tälle, jota käyttämällä voisin ohjeista etsiä vastaavat myös päiville, stringeille etc.?

Antti Laaksonen [22.01.2004 15:57:23]

#

CDbl tulee arvatenkin sanoista "convert to double". Tässä on kaikki VB:n muutosfunktiot:

muutettava tyyppi  funktion nimi
--------------------------------
Boolean            CBool
Byte               CByte
Currency           CCur
Date               CDate
Integer            CInt
Long               CLng
Single             CSng
String             CStr

bob [22.01.2004 20:27:34]

#

eikös toi CDbl() herjaa jos pistää esim. CDbl("")?
val() toimii paremmin

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta