getal in Userform wordt als tekst weggeschreven, waardoor berekeningen niet werken

Status
Niet open voor verdere reacties.

SjonR

Verenigingslid
Lid geworden
10 nov 2016
Berichten
3.324
Office versie
2016/365
Goedemorgen,

Ik heb een userform waar bedragen moeten worden ingevuld. Bijvoorbeeld tb30. Nu worden deze bedragen als tekst weggeschreven in mijn werkblad en daardoor neemt het blad het bedrag niet mee in de berekening.

Wat doe ik fout?

Code:
Private Sub CommandButton2_Click()
If Me.ob22.Value = True Then Blad1.Range("D2").Value = tb30.Value
If Me.ob9.Value = True Then Blad1.Range("E2").Value = tb30.Value
If Me.OptionButton21.Value = True Then Blad1.Range("D3").Value = TextBox24.Value
If Me.OptionButton11.Value = True Then Blad1.Range("E3").Value = TextBox24.Value
If Me.OptionButton20.Value = True Then Blad1.Range("D4").Value = TextBox27.Value
If Me.OptionButton13.Value = True Then Blad1.Range("E4").Value = TextBox27.Value
If Me.OptionButton19.Value = True Then Blad1.Range("D5").Value = TextBox28.Value
If Me.OptionButton15.Value = True Then Blad1.Range("E5").Value = TextBox28.Value
If Me.OB1.Value = True Then Blad1.Range("a2").Value = 1
If Me.OB2.Value = True Then Blad1.Range("a2").Value = 2
If Me.OptionButton3.Value = True Then Blad1.Range("a2").Value = 3
If Me.OptionButton4.Value = True Then Blad1.Range("a2").Value = 4
If Me.OB3.Value = True Then Blad1.Range("a2").Value = 5
If Me.OB4.Value = True Then Blad1.Range("b3").Value = 0
If Me.OB5.Value = True Then Blad1.Range("b3").Value = 1
Blad1.Range("b2").Value = TB7.Value
Blad1.Range("f2").Value = tb44.Value
Blad1.Range("f3").Value = tb46.Value
Blad1.Range("f4").Value = tb50.Value
Blad1.Range("g2").Value = tb61.Value
Blad1.Range("f10").Value = TextBox7.Value
Blad1.Range("F11").Value = TextBox9.Value
Blad1.Range("F12").Value = TextBox13.Value
Blad1.Range("F13").Value = TextBox14.Value
Blad1.Range("F14").Value = TextBox40.Value
If Me.CheckBox6.Value = True Then Blad1.Range("b11").Value = 1
If Me.CheckBox5.Value = True Then Blad1.Range("c11").Value = 1
If Me.CheckBox4.Value = True Then Blad1.Range("b12").Value = 1
If Me.CheckBox3.Value = True Then Blad1.Range("c12").Value = 1
If Me.CheckBox1.Value = True Then Blad1.Range("b13").Value = 1
If Me.CheckBox2.Value = True Then Blad1.Range("c13").Value = 1
If Me.CheckBox14.Value = True Then Blad1.Range("b14").Value = 1
If Me.CheckBox13.Value = True Then Blad1.Range("c14").Value = 1
Blad1.Range("L10").Value = TB16.Value
Blad1.Range("L11").Value = TextBox17.Value
Blad1.Range("L12").Value = TextBox20.Value
Blad1.Range("L13").Value = TextBox21.Value
If Me.CheckBox11.Value = True Then Blad1.Range("i11").Value = 1
If Me.CheckBox9.Value = True Then Blad1.Range("i12").Value = 1
If Me.CheckBox7.Value = True Then Blad1.Range("i13").Value = 1
If Me.OptionButton1.Value = True Then Blad1.Range("a6").Value = 0
If Me.OptionButton2.Value = True Then Blad1.Range("a6").Value = 1
TextBox43.Value = Blad1.Range("h28").Value
TextBox36.Value = Blad1.Range("d36").Value
TextBox37.Value = Blad1.Range("d37").Value
TextBox39.Value = Blad1.Range("e36").Value
TextBox38.Value = Blad1.Range("e37").Value
Frame6.Visible = True
Frame8.Visible = True
If Me.OB2.Value = True Then Frame7.Visible = True
If Me.OptionButton4.Value = True Then Frame7.Visible = True
If Me.OptionButton1.Value = True Then MsgBox "Partner kan mogelijk een voorlopige teruggave IB krijgen"
End Sub
 
Een TextBox bevat altijd, wat de naam al zegt, tekst. Je moet dus de inhoud eerst naar het gewenste numerike formaat converteren voordat je het naar een cel schrijft.
 
Ik dacht dat dit met .VALUE ipv .TEXT zou zijn opgelost, maar niet dus.

Hoe kan ik het converteren voordat het wordt weggeschreven?
 
Bijvoorbeeld zo:
Blad1.Range("D2").Value = Int(tb30)
 
Laatst bewerkt:
wat kan het toch weer simpel zijn.

Edmoor, enorm bedankt. Ik ben weer een beetje wijzer.

Gr.

Sjon
 
Ik juich iets te vroeg, want nu vult hij geen decimalen meer in.
 
Vandaar dat ik zei, "bijvoorbeeld".
Het is dus afhankelijk van wat je precies wil. Je kan het ook converteren naar een Double (Dbl).
Dan is het weer belangrijk er rekening mee te houden wat je decimaalscheiding is, een punt of een komma.
Je kan uiteraard ook de cel eigenschappen wijzigen.

Vanwege dat soort afhankelijkheden "zeuren" wij dus altijd om een voorbeeld document.
 
Laatst bewerkt:
Probeer het eens zo
Code:
Private Sub TextBox1_Change()
TextBox1 = Replace(TextBox1, ",", ".")
End Sub
 
@ Edmoor,

het gaat louter om getallen met twee decimalen achter de komma.

@ Philiep

Dit gaat mijn pet even te boven.
 
@ Edmoor,
het gaat louter om getallen met twee decimalen achter de komma.
Heb je die Dbl al getest? Dus in plaats van Int?

En het voorbeeld bestand waar ik om vroeg?
Zoals je ziet zijn er meerdere mogelijkheden, afhankelijk van wat je precies wilt bereiken.
 
Beste Sjon,
Zet volgende eens in de code van uw userform
Code:
Private Sub tb30_Change()
tb30 = Replace(tb30, ",", ".")
End Sub
en kijk hoe tb30 wordt weggeschreven
 
Ik ga het straks even proberen
 
Ik heb beide zaken geprobeerd.

1. DBL geeft direct een fout.

2. de replace-SUB heeft zover ik kan zien geen enkel resultaat.


Ik heb er nu wel een probleem bij, want doordat ik INT voor mijn textboxen heb gezet, geeft een niet gevulde textbox een foutmelding.

Helaas.

Ik heb hier mijn bestand :

Bekijk bijlage voorbeeld.xlsm
 
Bestudeer eerst eens het hoofdstuk 'lussen' (loops) in je VBA-basisboek.
Hernoem vervolgens de controls in het userform zodat je met een minimum aan code met 1 lus in 1 keer alle gegevens van het userform naar het werkblad kunt schrijven.
 
Zo gaat het bij mij direct goed:
Code:
Blad1.Range("D2").Value = CDbl(Replace(tb30, ".", ","))

Het maakt dan ook niet uit of je een punt of een komma als decimaalscheiding ingeeft.
 
Laatst bewerkt:
Int vervangen door Cdbl

@ SNB

geen idee wat jou oplossing precies is. Ik vraag me af of je begrijpt dat niet iedereen zoveel van VBA snapt als dat jij dat doet.

@ Edmoor

Ik heb de INT vervangen door jou oplossing CDbl(Replace(textbox7, ".", ",")), maar als textboxen leeg zijn geeft hij nog steeds een foutmelding.

Had jij die foutmelding niet?
 
Uiteraard geeft 'ie dan een foutmelding. Je kan natuurlijk eenvoudig controleren of er iets in de textboxbox staat of niet.
Code:
If textbox7 <> "" Then CDbl(Replace(textbox7, ".", ","))
 
Laatst bewerkt:
Helaas pakt ie deze code ook niet
 
Je moet die natuurlijk wel afmaken met een verwijzing naar de juiste cel:
Code:
If textbox7 <> "" Then Range("A1") = CDbl(Replace(textbox7, ".", ","))

Dat heb je denk ik niet gedaan?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan