10. april 2021 - 07:57Der er
8 kommentarer og 1 løsning
Problemer med talformat i UserForm (VBA)
Hej,
Jeg har en TextBox i en UserForm som henter værdien fra en celle i Excel. Tallet står i Excel som 104.953,16. Jeg ønsker at min TextBox skal vise tallet med tusindtalsseparator "." og decimalseparator "," som vist ovenfor.
Nogle gange.... ja - kun nogle gange.... viser den tallet som 10.495.316,00. Jeg har svært ved at finde årsagen til dette, men efter en masse søgning rundt på nettet, bliver det ved med at kredse omkring regionale indstillinger i Windows.
Jeg vil gerne have, at om man kører koden på en dansk PC eller på en PC i udlandet, så skal man have vist tallene i det format der er gældende der hvor koden køres - så 104.953,16 på en dansk PC, og 104,953.16 i udlandet.
Det største problem er faktisk ikke talformatet, men at den skærer kommaet fra, så det bliver til 10.495.316,00 i stedet for 104.953,16.
Jeg håber nogen kan hjælpe. Jeg har indsat lidt kode herunder som måske vil give et hint. Jeg kan i sagens natur ikke indsætte min UserForm :-)
Option Explicit Public Indbetaling As Currency Public ValueCell As String Public BilagCell As String
Private Sub UserForm_Activate() ValueCell = "F" & ActiveCell.Row BilagCell = "C" & ActiveCell.Row Dim BilagValue As Single BilagValue = Range(BilagCell).Value LabelHeader.Caption = "Specificer bilag " & BilagValue Indbetaling = Sheets("Kontoudtog").Range(ValueCell).Value TextBox_Indbetaling = Indbetaling TextBox_Indbetaling = Format(TextBox_Indbetaling, "#,##0.00") End Sub
Det med (komma, kontra punktum) er et velkendt problem, da det ligger i at VBA jo er lavet med al Engelsk formatering, og uden mulighed for regionale indstillinger. Jeg bruger følgende stump kode, i mine indstillinger på User forms.
Private Sub TextBox1_Change() TextBox1.Value = Format(TextBox1.Value, "#,##0.00 kr.") End Sub
Din kode indeholder ".Value". Jeg gør noget lignende ovenfor, men uden ".Value". Måske det gør en forskel for mig - jeg prøver. Som jeg skriver, så skifter det imellem at virke og ikke virke, så jeg skal lige prøve det af i noget tid før jeg kan konkludere om det løser problemet.
Lige for at være sikker - mit primære problem er jo, at de 104.953,16 bliver til 10.495.316,00 - tænker du at dit forslag løser denne del?
Undskyld alle mine spørgsmål - men jeg har ikke det sorte bælte i VBA, men det får man jo kun ved at begynde at bruge det :-)
#2 - Om du skriver "Value" eller "Text" er uden forskel. Og, ja formateringen burde løse problemet, selvom du øger tal rækken. Hvis det skifter med at virke, og ikke virke, må det være den værdi som du henter ind i TextBox'en som er anderledes. Jeg ved ikke hvor mange boxe du har, men du kan definere en for hver, hvor du har beløbs problemet.
Nu har jeg prøvet, og det virkede indtil det ikke virkede igen.... så lidt det samme som jeg skriver til start, at det af uforklarlige årsager skifter. Det er samme beløb jeg tester med hele tiden. Min kode ser ud som følger:
Private Sub TextBox_IndbetalingSimple_Change() TextBox_IndbetalingSimple.Value = Format(TextBox_IndbetalingSimple.Value, "#,##0.00") End Sub
Ved at bruge følgende kode: Debug.Print IndbetalingSimple
Får jeg i mit immediate vindue vist værdien af min variabel, og jeg kan se, at variablen hele tiden viser den rigtige værdi.
Det leder mig i en ny retning, for så er det min TextBox i min UserForm der viser noget forkert. I dette eksempel er værdien af min variabel 104953,16, men min TextBox viser 10.495.316,00 når jeg arbejder med formatering af variablen med følgende kode
Private Sub TextBox_IndbetalingSimple_Change() TextBox_IndbetalingSimple.Value = Format(TextBox_IndbetalingSimple.Value, "#,##0.00") End Sub
Det er naturligvis super forvirrende at arbejde med en UserForm hvor en TextBox angiver 10.495.316,00 når dette tal er 100 gange højere end det reelle tal.
#5 - Uden at have set det ark du arbejder med, har jeg ingen bud, udover det som jeg har skrevet (hvilket normalt virker). der må jo være en anden ting i dit Ark/kode der gør at det ændrer sig.
#5 - Jeg har sendt dig et svar på den private mail du sendte. Og jeg har testet det forslag som jeg skrev. Og det virker, ud fra din opstilling. Det der var problemet, var at du ville bruge regne funktioner mellem TextBoxe, og det kan du ikke, uden at ændre tekst formatet, til tal. At du skriver tal i TextBoxen gør det ikke til et tal, så længe der er enten et punktum eller komma i.
Jeg tror det må lede mig til, at jeg bruger et range i Excel til den opstilling jeg gerne vil lave - altså almindelige Excel celler. Så kan jeg bruge UserForms når der ikke skal beregnes på dem.
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.