Jeg har lavet en brugerformular, hvor der indtastes nogle værdier, som så skal bruges til at beregne nogle værdier, der sættes ind i en tekstbox i samme brugerformular og jeg har nu siddet med det så længe og prøvet så mange forskellige ting, så jeg er blevet helt lost. Jeg har derfor brug for hjælp med et par spørgsmål:
Hvis vba skal kunne regne videre med brugerens indtastning, hvordan skal det så konverteres til tal?
Når vba har beregnet en værdi ud fra indtastningerne i tekstbox, får man et udtryk med punktum imellem - f. eks 7.5, når jeg så vil regne videre med det, laves det om til 75:
7.5 er syv og en halv med UK locale indstilling. Hvis du har dansk locale indstillet , så vil indtastning af 7.5 altid blive læst som 75. Så hvis du et eller andet sted fabrikerer et tal som 7,5, men bruger funktionen Str til at få tallet ud som streng, så får du 7.5, fordi Str er ligeglad med den lokale separator og bruger "." som decimal separato. Hvis du bruger CStr så vil du få 7,5.
I dit eksempel: Eks: txtVærdi = 7.5 Værdi = txtVærdi Værdi = CDbl(txtVærdi) Værdi = Format(txtVærdi, "#,##0.00")
er slaget tabt efter første linje, for DER har txtVærdi fået 75 som værdi. Det viser du har en locale indstilling som bruger "," som decimal separator og ej "."
Hvor får du "7.5" fra ? Enten indtaster du det selv, så lad være at bruge "." ved indtastning, eller gså beregner systemet det, og du selv fremtvingrer brugen af "." som separator et eller andet sted ved en type konvertering fra tal til streng, og så går det galt. Lad være - VBA kan holde styr på det selv.
Du skal ikke have "7.5" at regne på, med dansk locale indstilling, men "7,5"
@ supertekst: Jeg havde egentlig lavet en Sub for hver textbox, som kørte hver gang, jeg ændrede i boxen ( Sub Textbox_Change() ), men kan se at du har foreslået Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean).
Jeg kender ikke denne funktion, og er ikke helt med på, hvad det der står i parentesen gør? Men er denne bedre at bruge, når man vil opdatere beregningen hver gang en værdi i en af boxene ændres?
så ryger du altså ud i problemer, fordi du konverter et tal til en streng, og formentligt bruger så strengen længere henne. Og det er sikkert dér det er gået galt for dig.
Formattering af tal har ingen indlydelse på tallet. Når du viser tallet i en textboks, så er det tekstboksens format der bestemmer hvordan tallet vises, uden at ændre dets værdi. Men når du begynder at cykle frem og tilbage mellem tal og strenge, så er det jo præcist der det går galt.
Kan du vise et helt forløb, dvs input, beregning og output.
I øvrigt bør du have OPtion Explicit øverst i dit modul, og deklarere alle variable, så der er styr på havd der er streng og hvad der er tal.
Dit første eksempel: Værdi = txtVærdi Værdi = CDbl(txtVærdi) Værdi = Format(txtVærdi, "#,##0.00")
viser en sammenblanding af koncepter: cdbl producerer et tal, mens Format outputter en streng).
Tusind tak for hjælpen :) min fejl lå primært i, at jeg ikke vidste, at Format funktionen lavede tallet til en streng, så det var neomans sidste kommentar, der løste problemet :)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.