Textbox berekenen en afronden

  • Onderwerp starter Onderwerp starter Neuz
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Neuz

Gebruiker
Lid geworden
21 aug 2012
Berichten
147
Beste,

In een userform heb ik een aantal textboxen staan welke ik bij elkaar wil laten optellen.
Tot zover nog geen problemen. Echter in de textbox waar ik het antwoord wil hebben
moet deze altijd naar boven worden afgerond op een geheel getal. Ook zou ik graag de
berekening pas willen laten plaatsvinden als alle textboxen een waarde bevatten zonder
foutmelding.

De formule welke ik nu gebruik is als volgt:
Code:
Me.TxtTotVerlof.Value = Me.TxtVerlof5.Value + Me.TxtVerlof4.Value + Me.TxtVerlof3.Value + Me.TxtVerlof2.Value + Me.TxtVerlof1.Value + Me.TxtNieuwVerlof.Value + Me.TxtLeeftijdUren.Value + Me.TxtExtraVerlof.Value - Me.TxtMinderVerlof.Value

Zijn er mensen die me hiermee kunnen helpen. Ik krijg namelijk de afronding niet voor elkaar.

Alvast bedankt.

Neuz
 
Zonder vbtje??:shocked:
Kijk eens of dit werkt?
Code:
Me.TxtTotVerlof.Value = Application.WorksheetFunction.RoundUp(Me.TxtTotVerlof.Value, 0)
 
Beste Philiep,

Jou oplossing werkt helaas niet.
Krijg de melding: Type komen niet overeen.

Wellicht ten overvloedde maar al mijn gegevens staan
op een userform. Naar mijn idee wordt er met jou
formule verwezen naar een worksheet.

Weet niet of je hier ook een oplossing voor weet.

Hoor het graag van je. Alvast bedankt.

Groet Neuz
 
Code:
 Naar mijn idee wordt er met jou
formule verwezen naar een worksheet.
Helemaal niet dit komt uit een userform van mij.
Post anders een vbtje met wat dummy gegevens erin.
Ik heb hier ook nog een heel stuk code om de gegevens te controleren. (uw tweede vraag)
 
Nu wel als het goed is. Zag een foutje in het script.
 
Code:
Private Sub CommandButton1_Click()
   txt1 = Val(Replace(TextBox1.Value, ",", "."))
   txt2 = Val(Replace(TextBox2.Value, ",", "."))
   txt3 = Val(Replace(TextBox3.Value, ",", "."))
   txt4 = Val(Replace(TextBox4.Value, ",", "."))
   txt5 = Val(Replace(TextBox5.Value, ",", "."))
   TextBox6.Value = Application.RoundUp(txt1 + txt2 + txt3 + txt4 - txt5, 0)
End Sub
 
Beste Philiep en Harry,

Ik heb beide oplossingen geprobeerd.

De oplossing van Philiep rond het getal af maar helaas nog niet op de manier zoals ik dit wil.
Ik wil graag dat alle getallen altijd naar boven worden afgerond, dus ook als deze eindigd op ,1 t/m ,4.

De oplossing van Harry werkt in het voorbeeldbestandje naar behoren ook de afronding werkt perfect.
Echter zodra ik de oplossing ombouw naar mijn eigen bestand werkt deze niet meer. Onderstaand heb ik de
omgebouwde code toegevoegd. Wellicht heb ik ergens een foutje gemaakt, maar ik zie het nu niet.
Code:
TxtVerlof5 = Val(Replace(TxtVerlof5.Value, ",", "."))
TxtVerlof4 = Val(Replace(TxtVerlof4.Value, ",", "."))
TxtVerlof3 = Val(Replace(TxtVerlof3.Value, ",", "."))
TxtVerlof2 = Val(Replace(TxtVerlof2.Value, ",", "."))
TxtVerlof1 = Val(Replace(TxtVerlof1.Value, ",", "."))
TxtNieuwVerlof = Val(Replace(TxtNieuwVerlof.Value, ",", "."))
TxtLeeftijdUren = Val(Replace(TxtLeeftijdUren.Value, ",", "."))
TxtExtraVerlof = Val(Replace(TxtExtraVerlof.Value, ",", "."))
TxtMinderVerlof = Val(Replace(TxtMinderVerlof.Value, ",", "."))
TxtTotVerlof.Value = Application.RoundUp(TxtVerlof5 + TxtVerlof4 + TxtVerlof3 + TxtVerlof2 + TxtVerlof1 + TxtNieuwVerlof + TxtLeeftijdUren + TxtExtraVerlof - TxtMinderVerlof, 0)

Hopelijk kunnen jullie me helpen.

Groet Neuz
 
Beste,

Ik ben nog even verder aan het prutsen geweest en kom op de volgende code uit.
Code:
Me.TxtTotVerlof = Val(Me.TxtWVerlof5) + Val(Me.TxtBVerlof5) + Val(Me.TxtWVerlof4) + Val(Me.TxtBVerlof4) + Val(Me.TxtWVerlof3) + Val(Me.TxtBVerlof3) + Val(Me.TxtWVerlof2) + Val(Me.TxtBVerlof2) + Val(Me.TxtWVerlof1) + Val(Me.TxtBVerlof1) + Val(Me.TxtWNieuwVerlof) + Val(Me.TxtBNieuwVerlof) + Val(Me.TxtBLeeftijdUren) + Val(Me.TxtExtraVerlof) - Val(Me.TxtMinderVerlof)

Echter wordt deze code afgerond naar beneden.

Is hier een oplossing voor te vinden?

Alvast bedankt.

Groet Neuz
 
Beste Philiep en Harry,
De oplossing van Harry werkt in het voorbeeldbestandje naar behoren ook de afronding werkt perfect.
Echter zodra ik de oplossing ombouw naar mijn eigen bestand werkt deze niet meer.

Hopelijk kunnen jullie me helpen.

Groet Neuz

Tijd om het echte bestand te plaatsen.
 
Een klein beetje meer informatie over welk Userform het ging had ik wel op prijs gesteld.
Code:
Private Sub TxtMinderVerlof_Change()
    'Max verkoop
    'per kalenderjaar bovenwettelijke uren (betreffende jaar) + leeftijdsuren (naar ratio)
    WV5 = CDec(Val(TxtWVerlof5))
    BV5 = CDec(Val(TxtBVerlof5))
    WV4 = CDec(Val(TxtWVerlof4))
    BV4 = CDec(Val(TxtBVerlof4))
    WV3 = CDec(Val(TxtWVerlof3))
    BV3 = CDec(Val(TxtBVerlof3))
    WV2 = CDec(Val(TxtWVerlof2))
    BV2 = CDec(Val(TxtBVerlof2))
    WV1 = CDec(Val(TxtWVerlof1))
    BV1 = CDec(Val(TxtBVerlof1))
    WNV = CDec(Val(TxtWNieuwVerlof))
    BNV = CDec(Val(TxtBNieuwVerlof))
    BLU = CDec(Val(TxtBLeeftijdUren))
     EV = CDec(Val(TxtExtraVerlof))
     MV = CDec(Val(TxtMinderVerlof))
    TxtTotVerlof = Application.RoundUp(WV5 + BV5 + WV4 + BV4 + WV3 + BV3 + WV2 + BV2 + WV1 + BV1 + WNV + BNV + BLU + EV - MV, 0)
End Sub
 
@hsv
Een klein beetje meer informatie over welk Userform het ging had ik wel op prijs gesteld.
Code:
Private Sub TxtMinderVerlof_Change()
    'Max verkoop
    'per kalenderjaar bovenwettelijke uren (betreffende jaar) + leeftijdsuren (naar ratio)
    WV5 = CDec(Val(TxtWVerlof5))
    BV5 = CDec(Val(TxtBVerlof5))
    WV4 = CDec(Val(TxtWVerlof4))
    BV4 = CDec(Val(TxtBVerlof4))
    WV3 = CDec(Val(TxtWVerlof3))
    BV3 = CDec(Val(TxtBVerlof3))
    WV2 = CDec(Val(TxtWVerlof2))
    BV2 = CDec(Val(TxtBVerlof2))
    WV1 = CDec(Val(TxtWVerlof1))
    BV1 = CDec(Val(TxtBVerlof1))
    WNV = CDec(Val(TxtWNieuwVerlof))
    BNV = CDec(Val(TxtBNieuwVerlof))
    BLU = CDec(Val(TxtBLeeftijdUren))
     EV = CDec(Val(TxtExtraVerlof))
     MV = CDec(Val(TxtMinderVerlof))
    TxtTotVerlof = Application.RoundUp(WV5 + BV5 + WV4 + BV4 + WV3 + BV3 + WV2 + BV2 + WV1 + BV1 + WNV + BNV + BLU + EV - MV, 0)
End Sub
Je had het inmiddels al gevonden maar het betrof userform "FormPopUp".
Met betrekking tot jou oplossing, ook deze rond het getal naar beneden af.
De bedoeling is om het getal ten alle tijde naar boven af te ronden.

Hopelijk is hier nog een oplossing voor.

Alvast bedankt voor de gedane moeite.

Groet Jaimy
 
De functie RoundUp rond echt niet naar beneden af.

Ik heb 8*0.2 en 2*0.1 = 1.8
Trek met de laatste er 1.2 vanaf = 0.6
Afgerond naar boven komt er 1 uit.

Ander getallen.
4*0.2+2*0.1+0.15+2.3+0.16+0.26= 3.87
3.87-2.4 = 1.47
Afgerond naar boven komt er 2 uit.
Trek ik er 2.86 vanaf → 3.87-2.86 = 1.01 wordt het ook een 2.
Trek ik er 2.87 vanaf wordt het netjes een 1.

Twee testjes lijkt mij voldoende, of jij moet me kunnen overtuigen met andere getallen waarin het niet goed afrond.

Ps. Reageer via de reageerknop ipv de citeerknop
Ik hoef m'n eigen berichten niet steeds terug te lezen.
 
Laatst bewerkt:
Hierbij het orginele bestand, ik heb de oplossing van HSV toegevoegd.
Het betreft het userform "FormPopUp" doorloop het gehele scherm en
vul de volgende gegevens in:

Jaartal: 2017
Geboortejaar: 1989
Contract uren: 36

Vul op het tabblad verlof bij alle witte velden 1 in.
In het veld totaal verlof dit jaar zou dan.
De som zou dan zijn
1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 144,0 + 21,6 + 1 - 1 = 175.6
Dit zou dan afgerond 176 moeten worden.
Het userform geeft echter 175 aan, zie het screenshot.
2017-01-27 21_01_01-Microsoft Excel - Salarisberekening - Test.xlsm.png

Groet Neuz
 
Hoe krijg ik de nieuw gekregen uren in de textboxen?
 
Door de andere gegevens in te voeren zoals in mijn bericht beschreven staat

Het betreft het userform "FormPopUp" doorloop het gehele scherm en
vul de volgende gegevens in:

Jaartal: 2017 (tabblad algemeen)
Geboortejaar: 1989 (tabblad persoonlijk 3e veld achter geboorte datum)
Contract uren: 36 (tabblad contract)
 
Laatst bewerkt:
Die heb ik ingevuld, maar geen verkregen uren.
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan