Avatar billede nemlig Professor
16. august 2008 - 15:46 Der er 19 kommentarer og
1 løsning

VBA-Decimal input i textfelt overføres til celle som text.

Hej. Jeg har en Userform med et textfelt, hvor der kan indtastes fx. 12,25 (Et tal med 2 cifre). Decimaltegnet er "komma".
Men når jeg overfører inputtet til en celle i arket, bliver tallet opfattet som text.
Grunden til det er nok engelsk/dansk syntax, for hvis jeg anvender "punktum" som decimaltegn, virker det fint.

Nogen der har en løsning - fx at kommaet ændres til punktum, inden tallet afleveres i cellen.
Avatar billede excelent Ekspert
16. august 2008 - 15:59 #1
[A1] = CDec(Me.TextBox1.Value)
Avatar billede nemlig Professor
16. august 2008 - 16:12 #2
øh - det er jeg ikke med på. Er ny i VBA.
Jeg overfører med denne metode:

ActiveCell.Offset(0, 3) = TextBox1.Value
Avatar billede excelent Ekspert
16. august 2008 - 16:15 #3
hvis du har flere textbokse, er det lettere at vælge hvilken hvis
du starter med me.
så får du en liste du kan vælge imellem

ActiveCell.Offset(0, 3) = cdec(TextBox1.Value)

men det er muligt vi skal over i noget med lokal decimalseperator
ala :

lokal = Application.DecimalSeparator
x = Me.TextBox1.Value
If InStr(x, ".") > 0 Then x = Application.WorksheetFunction.Substitute(x, ".", lokal)
If InStr(x, ",") > 0 Then x = Application.WorksheetFunction.Substitute(x, ",", lokal)
x = CDec(x)
[A1] = x

skal lige lufte hunene..  tilbage om 30 min.
Avatar billede nemlig Professor
16. august 2008 - 16:24 #4
Jeg forstår det desværre ikke helt. Kan ikke finde ud af, hvor jeg skal anvende koderne,

Jeg har denne kode på den påfældende TextBox (Der må kun indtastes tal og komma):

Private Sub TextBox8_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Select Case KeyAscii
        Case Asc("0") To Asc("9")
        Case Asc(",")
        Case Else
            KeyAscii = 0
            MsgBox "Du må kun indtaste TAL!", 16, "Fejl"
    End Select
End Sub

Og når der klikkes på [OK-knappen], så har jeg denne kode:

Private Sub cmdOK_Click()
    ActiveWorkbook.Sheets("Test").Activate
    Range("A1").Select
    ActiveCell.Value = TextBox2.Value
    ActiveCell.Offset(0, 1) = TextBox3.Value
    ActiveCell.Offset(0, 2) = ComboBox1.Value
    ActiveCell.Offset(0, 3) = TextBox4.Value
    ActiveCell.Offset(0, 4) = TextBox5.Value
    ActiveCell.Offset(0, 5) = TextBox6.Value
    ActiveCell.Offset(0, 6) = TextBox7.Value
    ActiveCell.Offset(0, 7) = TextBox8.Value
        Me.Label13 = Sheets("Test").Range("A4").Text
    Range("A1").Select
End Sub
Avatar billede excelent Ekspert
16. august 2008 - 16:39 #5
prøv start med at ændre i knappens kode :

ActiveCell.Offset(0, 7) = cdec(TextBox8.Value)

virker det ikke så tager vi den der fra
Avatar billede nemlig Professor
16. august 2008 - 18:09 #6
Så har jeg prøvet det, men får en fejl:
Run-time error '13':
Type mismatch
Avatar billede excelent Ekspert
16. august 2008 - 18:20 #7
virker fint her, hvilken linie stopper koden i ?
Avatar billede nemlig Professor
16. august 2008 - 18:44 #8
Spørgsmålet er nok om jeg har sat linjen, der rigtige sted. Koden ser sådan her ud, og den stopper ved den kodelinje, som du har foreslået:

Private Sub cmdOK_Click()
    ActiveWorkbook.Sheets("Test").Activate
    Range("A1").Select

    ActiveCell.Value = TextBox2.Value
    ActiveCell.Offset(0, 1) = TextBox3.Value
    ActiveCell.Offset(0, 2) = ComboBox1.Value
    ActiveCell.Offset(0, 3) = TextBox4.Value
    ActiveCell.Offset(0, 4) = TextBox5.Value
    ActiveCell.Offset(0, 5) = TextBox6.Value
    ActiveCell.Offset(0, 6) = TextBox7.Value
    ActiveCell.Offset(0, 7) = CDec(TextBox8.Value)
    Me.Label13 = Sheets("Test").Range("A4").Text
    Range("A1").Select
End Sub
Avatar billede excelent Ekspert
16. august 2008 - 18:50 #9
ok jeg prøver lige med din talgenerator i mit eks. ark
Avatar billede nemlig Professor
16. august 2008 - 18:52 #10
Selv om jeg fjerner talgeneratoren på TextBox8, får jeg stadig fejlen.
Avatar billede excelent Ekspert
16. august 2008 - 18:57 #11
Det var mystisk, jeg kan ikke få mit eks.til at fejle
hverken med eller uden talgeneratoren

Har du mulighed for at sende filen ?
Avatar billede excelent Ekspert
16. august 2008 - 19:02 #12
prøv evt. lige

ActiveCell.Offset(0, 7) = CDec(TextBox8.Value)
ret til
ActiveCell.Offset(0, 7) = TextBox8.Value * 1
Avatar billede nemlig Professor
16. august 2008 - 19:07 #13
Samme fejl og i samme linje.
Hvad skulle den linje gøre - den er magen til den oprindelige linje, bortset fra "* 1"
Avatar billede excelent Ekspert
16. august 2008 - 19:08 #14
konvertere tekst til tal
Avatar billede nemlig Professor
16. august 2008 - 19:21 #15
Hov - jeg har lige opdaget, at programmet faktisk kan finde ud af at regne på tallene med decimaler, selv om de overføres til arket som tekst.
Så det lader til at jeg ikke behøver den konvertering!
Avatar billede excelent Ekspert
16. august 2008 - 19:25 #16
har du formateret cellerne som tekst?
Avatar billede nemlig Professor
16. august 2008 - 19:33 #17
Næh - de står bare til "Standard". Men det virker.
Avatar billede excelent Ekspert
16. august 2008 - 19:36 #18
den eneste måde jeg kan fremprovokerer Run time error 13
er ved at indtaste fx. "1,1  eller '1,1 eller a1,1
måske det kan give et hint til problemet
Avatar billede nemlig Professor
16. august 2008 - 20:40 #19
Tak for dine mange bidrag. Jeg har det til at virke, men har ikke fundet ud, hvad det er der fejler. Det virker med den oprindelige kode - og det er jeg lige nu tilfreds med.

Send venligst et svar.

Jeg har lige en ting mere, men jeg stiller det i et nyt Excel-spørgsmål.
Avatar billede excelent Ekspert
17. august 2008 - 08:07 #20
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester