Avatar billede Larsgl Novice
26. juli 2016 - 08:02 Der er 2 kommentarer og
1 løsning

Userform textbox kan ikke vise/læse korrekt fra comma separated decimal tal

Har lavet en Userform som skal vise resultaterne fra nogle celler. Brugeren klikker på en knap og der zoomes ud. Problemet er, at VBA tilsyneladende kun kan genkende . som komma ved decimaler.

Her er lidt kode, hvor jeg har prøvet at få det til at virke:

Private Sub UserForm_Initialize()
Dim ws As Worksheet
Dim aNumber As Double
Set ws = Worksheets("Input")

Application.DecimalSeparator = ","
Application.ThousandsSeparator = "."

TextBox1.Value = ws.Range("B20")
TextBox2.Value = ws.Range("B21")
TextBox3.Value = ws.Range("B24")
TextBox4.Value = ws.Range("B26")
TextBox5.Value = ws.Range("B28").Value
TextBox7.Value = ws.Range("B29")
TextBox1.Text = Format(TextBox1.Text, "#.###,0#")
TextBox3.Text = Format(TextBox3.Text, "#.##0,00")
TextBox4.Text = CDbl(TextBox4.Text)
TextBox5.Text = Format(TextBox5, "percent")
TextBox7.Text = Format(TextBox7, "#,###.00")

'Me.TextBox4.Value = Replace(Me.TextBox4.Value, ".", ",", 1, -1, vbTextCompare)
Me.TextBox7.Value = Replace(Me.TextBox7.Value, ".", "", 1, -1, vbTextCompare)
Me.TextBox7.Value = Replace(Me.TextBox7.Value, ",", ".", 1, -1, vbTextCompare)

Helt galt går det ved procent tallene jf. celle B28 og B29
"0.00%" virker heller ikke! Jeg har også søgt efter default indstillinger i VBA for at se om man kan ændre her til comma decimaler og thousands separators som punktummer. Har brugt timer, men uden held.
Jeg vil være meget taknemmelig for en løsning på problemet!

PS: Ignorer venligst alle backslash tegn disse er ikke i min kode men er åbenbart indsat her automatisk!

Mvh Lars Gl
Avatar billede Slettet bruger
26. juli 2016 - 09:38 #1
Jeg kan ikke rigtig se, hvad det er du vil, men så vidt jeg kan se, har du blandet lidt dine formatering
den viser en "pænt" tal når jeg bruger Format(TextBox7, "#,###0.00%")
Samt Format(TextBox3, "#,##0.00") og Format(TextBox1, "#,###.0#")
så viser den komma som dezimalseperator, og punkt for hver tusind.
Har jeg helt misforståed det, eller...?
Avatar billede excelent Ekspert
26. juli 2016 - 23:18 #2
Formatering af tal i en TEKST-boks kan være problematisk
Som det ses skal placering af komma og punktum være modsat
af det man egentlig forventer som resultat

eks. [B2] = 1.234,56
Her anvendes følgende format for at få det ønskede resultat i TextBoxen :

Me.TextBox1 = Format([B2], "#,###.##") som givere : 1.234,56 i TextBoxen

Som det ses anvendes komma som tusindtals separator og punktum som
decimal separator i Format-strengen, men vi får alligevel det rette format.

Som det fremgår af følgende eks. skal man desuden tage stilling til om der skal
anvendes # eller 0 i format-strengen.
Dette har betydning hvis man fx ønsker foranstillede nuller, eller decimaler
med 2 cifre som i eks. [B7] hvor vi har værdien 0,5 og ønsker den vist som 0,50
i TextBoxen, så anvendes formatet : "#,##0.00"

Mem husk det er stadig tekst selv om det er tal der vises, så hvis de skal skrives
tilbage til arket, så skal de konverteres til tal med fx CDec(TextBox1)


FORMAT EKS.:

Private Sub UserForm_Initialize()
'[B2] = 1.234,56
'Me.TextBox1 = [B2] 'vises som : 1234.56
'Me.TextBox1 = Format([B2], "#,###.##") 'vises som : 1.234,56
'Me.TextBox1 = Format([B2], "0,000.00") 'vises som : 1.234,56
'-------------------------------------------------------------
'[B3] = 234,56
'Me.TextBox1 = [B3] 'vises som : 234.56
'Me.TextBox1 = Format([B3], "#,###.##") 'vises som : 234,56
'Me.TextBox1 = Format([B3], "0,000.00") 'vises som : 0.234,56
'-------------------------------------------------------------
'[B4] = 34,56
'Me.TextBox1 = [B4] 'vises som : 34.56
'Me.TextBox1 = Format([B4], "#,###.##") 'vises som : 34,56
'Me.TextBox1 = Format([B4], "0,000.00") 'vises som : 0.034,56
'-------------------------------------------------------------
'[B5] = 4,56
'Me.TextBox1 = [B5] 'vises som : 4.56
'Me.TextBox1 = Format([B5], "#,###.##") 'vises som : 4,56
'Me.TextBox1 = Format([B5], "0,000.00") 'vises som : 0.004,56
'-------------------------------------------------------------
'[B6] = 0,56
'Me.TextBox1 = [B6] 'vises som : 0.56
'Me.TextBox1 = Format([B6], "#,###.##") 'vises som : ,56
'Me.TextBox1 = Format([B6], "#,##0.##") 'vises som : 0,56
'Me.TextBox1 = Format([B6], "0,000.00") 'vises som : 0.000,56
'-------------------------------------------------------------
'[B7] = 0,5
'Me.TextBox1 = [B7] 'vises som : 0.5
'Me.TextBox1 = Format([B7], "#,###.##") 'vises som : ,5
'Me.TextBox1 = Format([B7], "#,##0.##") 'vises som : 0,5
'Me.TextBox1 = Format([B7], "#,##0.00") 'vises som : 0,50
'Me.TextBox1 = Format([B7], "0,000.00") 'vises som : 0.000,50
End Sub
Avatar billede Larsgl Novice
27. juli 2016 - 05:24 #3
Tak for svarene både til Thomas S og excelent

Jeg har fx tallet 50.554,54 i ws [B26]
TextBox4.Value = ws.Range("B26") * 1
Me.TextBox4.Text = Format(TextBox4.Text, "#,##0.00")
Giver resultatet i textboxen: 5.055.454,00 ??
Altså er komma separationen sat to pladser forkert til højre

Men fejlen er jo min reference efter Format som skal være cellen! Som excelent angiver!!!
Me.TextBox4.Text = Format(ws.Range("B26"), "#,##0.00")
Og procent tallet:
Me.TextBox5.Text = Format(ws.Range("B28"), "0.00%")
Virker! Great


Tusinde tak for hjælpen jeg kan nu komme videre i teksten!!
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

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