Textbox wegschrijven als getal

Status
Niet open voor verdere reacties.

Buschop

Gebruiker
Lid geworden
2 mei 2019
Berichten
7
Hallo,

Ik heb een userform aangemaakt.
Hierin een textbox aangemaakt waarin bij de invoer van een getal deze wordt weergeven met twee cijfers achter de komma en duizendtallen gescheiden door een punt (bij het verlaten van de textbox).

Private Sub txtGetal_Exit(ByVal Cancel As MSForms.ReturnBoolean)
txtGetal.Value = Replace(txtGetal.Value, ".", Application.DecimalSeparator)
If IsNumeric(txtGetal.Value) Then txtGetal.Value = Format(txtGetal.Value, "#,##0.00")
End Sub

So far so good :)

Daarnaast in het userform een knop toegevoegd waarbij de inhoud wordt weggeschreven naar een werkblad.
Echter, als ik de inhoud wegschrijf, wordt deze als tekst weergegeven in het werkblad.

Hiervoor de volgende codes gebruikt:

Private Sub cmdToevoegen_Click()
Dim iRow As Long
Dim ws As Worksheet
Set ws = Worksheets("Blad1")
iRow = ws.Cells(Rows.Count, 1) _
.End(xlUp).Offset(1, 0).Row
ws.Cells(iRow, 1).Value = Me.txtGetal.Value

Op dit forum wel een oplossing gevonden welke de invoer als getal wegzet, achter dan wordt het getal afgerond op nul decimalen ...terwijl het dus op twee decimalen moet worden weggeschreven.
De oplossing wat ik op dit forum las, is de laatste regel vervangen door:

ws.Cells(iRow, 1).Value = IIf(txtGetal.Text = "", Null, Val(txtGetal.Text))

Deze regel converteert naar een getal, maar dan zo ik deze graag in twee decimalen willen hebben.
Wie-o-wie?

Alvast dank!
 
Gebruik je in dat tekstveld een punt of een komma voor decimaalscheiding?
Maak er eens dit van, dan mag het beide:
Code:
Val(Replace(txtGetal.Text, ",", "."))
 
Laatst bewerkt:
Thnx voor je reactie!

Ik gebruik het numerieke deel van het toetsenbord (dus punt voor decimaalscheiding).
Bij het toepassen van je code krijg ik de volgende uitkomsten:

Invoer : 12.34
Zichtbaar in textbox (na verlatren textbox): 12,34
In werkblad: 12,34 (dus als getal) .. werkt dus prima!

Echter bij getallen, groter dan 1000 wordt deze ingekort.

Invoer: 1234.56
Zichtbaar in textbox (na verlaten textbox): 1.234,56
In werkblad: 1,23 (als getal) ... hier gaat het dus niet goed ...
 
VBA werk altijd met Amerikaans formaat.
De duizenscheider is dus een komma en de decimaalscheider een punt.
Logisch dus dat 1.234,56 door de VAL functie wordt vertaald naar 1.23 wat in een Nederlandse Exel wordt weergegeven als 1,23
 
De duizendscheider is dus het euvel.

Ik heb nu volgende code:
If IsNumeric(txtGetal.Value) Then txtGetal.Value = Format(txtGetal.Value, "#,##0.00")
vervangen door:
If IsNumeric(txtGetal.Value) Then txtGetal.Value = Format(txtGetal.Value, "#0.00")

De textbox geeft weliswaar geen scheiding van duizendtallen, maar alles wordt wel netjes weggeschreven in het werkblad.
Zo werkt het dus wel allemaal :)
 
Kan allemaal in 1 regel.

Code:
Private Sub cmdToevoegen_Click()
  If IsNumeric(txtGetal) Then Sheets("Blad1").Cells(Rows.Count, 1).End(xlUp).Offset(1) = Replace(txtGetal.Value, ".", ",")
End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan