Avatar billede bufli Mester
10. april 2021 - 07:57 Der 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
Avatar billede ebea Ekspert
10. april 2021 - 08:38 #1
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

Så kan du selv tilpasse.
Avatar billede bufli Mester
10. april 2021 - 09:10 #2
Tak ebea,

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 :-)
Avatar billede ebea Ekspert
10. april 2021 - 09:46 #3
#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.
Avatar billede bufli Mester
11. april 2021 - 06:52 #4
Hej ebea,

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

Det er super mystisk
Avatar billede bufli Mester
11. april 2021 - 07:52 #5
Hej igen,

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.

Nogen gode ideer?
Avatar billede ebea Ekspert
11. april 2021 - 08:20 #6
#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.
Avatar billede ebea Ekspert
11. april 2021 - 19:06 #7
#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.

IndbetalingDebitor = CStr(CLng(SalgDebitor - CStr(CLng(GebyrDebitor))))
    TextBox_IndbetalingDebitor = IndbetalingDebitor
Avatar billede bufli Mester
11. april 2021 - 19:57 #8
Hej ebea,

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.

Jeg siger mange tusind tak for din hjælp.
Avatar billede ebea Ekspert
11. april 2021 - 20:30 #9
#8 - Du er velkommen ;-)
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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