Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

simpele berekening maken

None
26 antwoorden
  • Ben net een beetje begonnen met VBA. Heb een formulier waarin o.a. 3 invoervelden aanwezig zijn: aantal, prijs en bedrag. Met onderstaande code wordt het bedrag ingevuld als aantal en prijs bekend zijn:
    [code:1:3f0cf9733c]Private Sub aantal_Change()
    If prijs.Value <> "" Then
    bedrag.Value = aantal.Value * prijs.Value
    Else
    bedrag.Value = "= aantal x prijs"
    End If
    End Sub[/code:1:3f0cf9733c]
    Als één van de velden (aantal of prijs) aangepast wordt gaat dat goed zolang er maar iets staat in het veld. Dus selecteren en direct vervangen gaat goed. Eerst veld leegmaken geeft direct een foutmelding. Iemand een idee hoe dit op te lossen is??
  • Je hebt misschien voor beide tekstboxen (aantal en prijs) dezelfde procedure ingesteld? Misschien wordt de waarde van het veld (je zit in Access?) op Null gezet als je de inhoud wist? Ik zou voor beide velden checken of ze leeg of null zijn. En dan in een aparte sub die vanuit de _Change van beide velden wordt aangeroepen:
    [code:1:22d97bf216]
    Private Sub aantal_Change()
    Berekenen()
    End Sub
    ———
    Private Sub prijs_Change()
    Berekenen()
    End Sub
    ———
    Sub Berekenen()
    If prijs.Value <> "" And Not IsNull(prijs.Value) And aantal.Value <> "" And Not IsNull(aantal.Value) Then
    bedrag.Value = aantal.Value * prijs.Value
    Else
    bedrag.Value = "= aantal x prijs"
    End If
    End Sub[/code:1:22d97bf216]
  • Hoi, bedankt voor de snelle reactie. Heb het geprobeerd zoals hierboven aangegeven staat. Krijg nu direct een error als ik een waarde in veld 'aantal' wil invoeren. Error: "Compileerfout: syntaxis fout" in de regel
    [code:1:5291b3003f]Private Sub prijs_Change()
    Berekenen()[/code:1:5291b3003f]
  • Dan maak je er dit van

    Private Sub prijs_Change()
    Berekenen
    End Sub

    Dus zonder ()
  • Super!!!! Dat is het :lol:

    Bedankt!!

    Weet je dan ook hoe ik het veld prijs het euro-format kan geven. M.a.w. dat het getal dat ingevoerd wordt in de userform er een € voor krijgt en dat duizendtallen gescheiden worden etc?
    Dit formulier is overigens voor Word. Hiermee wordt een factuur gevuld. Het euroteken staal al wel in het Word sjabloon, maar het zou netjes zijn als het ook in het formulier zelf al getoond wordt.

    Alvast hartelijk dank!
  • Is hier niet de functie 'Format(getal,"lay-out")' geschikt voor?
  • Ja, zo dan:

    bedrag.Value = Format(aantal.Value * prijs.Value , "€ #,###.00")
  • Misschien wel? Enig idee hoe ik die toe moet passen dan??
  • Paulus, meer dan bedankt!! Ik had al wat zitten proberen en kwam in de goede richting, maar dit is precies wat ik zocht!
    Nogmaals heel hartelijk dank!!! :D
  • Wordt een beetje eentonig misschien, maar… zit nog met het volgende. Drie van de vijf velden gaan goed. De 5 velden (incl. formules) bestaan uit: aantal x prijs = bedrag - korting = betalen
    De velden waarmee een berekening gemaakt worden krijg ik met het format attribuut in orde. Echter de twee invulvelden prijs en korting niet. Een deel van de code ziet er tot nog als volgt uit:
    [code:1:b0520facb8]Private Sub aantal_Change()
    'Als het veld aantal wordt gewijzigd wordt verder gegaan onder sub berekenen
    Berekenen
    End Sub

    Private Sub prijs_Change()
    'Als het veld prijs wordt gewijzigd wordt verder gegaan onder sub berekenen
    Berekenen
    End Sub

    Private Sub korting_Change()
    'Als het veld korting wordt gewijzigd wordt verder gegaan onder sub berekenen
    Berekenen
    End Sub

    Sub Berekenen()
    'Als het veld prijs, aantal en korting niet leeg zijn worden de formules uitgevoerd
    If prijs.Value <> "" And Not IsNull(prijs.Value) And aantal.Value <> "" And Not IsNull(aantal.Value) And korting.Value <> "" And Not IsNull(prijs.Value) Then
    bedrag.Value = Format(aantal.Value * prijs.Value, "€ #,###0.00")
    betalen.Value = Format(bedrag.Value - (bedrag.Value / 100 * korting.Value), "€ #,###0.00")

    Else
    'Anders wordt er een tekst ingevuld
    bedrag.Value = "wordt ingevuld …"
    betalen.Value = "wordt ingevuld …"
    End If
    End Sub[/code:1:b0520facb8]

    Weet iemand waar welke code geplaatst moet worden?? (Het blokje in de code is een euro-teken). Ik heb zoiets geprobeerd, maar dat werkt dus niet :( [code:1:b0520facb8]prijs.Value = Format ("€ #,###0.00")[/code:1:b0520facb8]
    Alvast bedankt!
  • Ik zie in de eerste plaats:
    And korting.Value <> "" And Not IsNull(prijs.Value) Then
    wat volgens mij moet zijn
    And korting.Value <> "" And Not IsNull([b:db8352191a]korting[/b:db8352191a].Value) Then

    Format is verder geen attibuut, maar een functie, die je 2 argumenten meegeeft: expressie en notatie:
    prijs.Value = Format (prijs.Value, "€ #,###0.00")
    zal een stuk beter werken :-)

    En je zou hem in de Sub Berekenen kunnen zetten, na het uitrekenen van Bedrag en Betalen, dus in hetzelfde stuk van de if, als je zeker weet dat ze niet null of leeg zijn, anders geeft Format weer een foutmelding.
  • Yes, 't gaat steeds beter … klein probleempje als je prijs wilt veranderen, maar dat heb ik opgelost door een knop te maken die velden aantal, prijs en korting leeg maakt. Daarna zijn ze zonder problemen opnieuw in te vullen.

    Blijf ik nog met één veld zitten en dat is het kortingsveld. Het zou mooi zijn als dat standaard wordt voorzien van "getal %"

    Durf het bijna niet meer te vragen … :oops:
  • Kan ook met Format, maar dat gebruik je meer als je een notatie wil ombouwen. Nu volstaat:
    korting.Value = korting.Value & " %"
    Dus gewoon twee stringwaardes aan elkaar knopen met een &
  • Logisch…. maar helaas. Ik krijg dan weer een foutmelding in de rekenformule. Ik heb het nu opgelost door in het Word document wel het % teken te laten plaatsen:
    [code:1:52a1d1bcd4].Bookmarks("korting").Range.Text = korting.Value & " %"[/code:1:52a1d1bcd4]

    Tot zover dus opgelost, al was het mooier geweest als het % teken ook al in het formulier zou komen. Tot zover ontzettend bedankt Paulus!! en MaartenW!
  • Oh ja, op het moment dat je de instructie uitvoert die het procentteken erin zet, treedt de _Change-event weer op en wil ie gaan rekenen met dit keer het %-teken in het veld, waardoor het geen numerieke value meer is. Ik zet zelf wel es een %-teken in een label vlak achter te textbox, zou hier ook wel kunnen.
  • Inderdaad … opgelost. Nogmaals dank!
  • Ik begin helemaal enthousiast te worden over VBA :lol:
    Het één en ander is al aardig geautomatiseerd. Ben nu met een stap bezig waar ik zo ook weer niet uitkom.
    In de voettekst van de factuur worden een aantal velden vanuit het formulier ingevuld, namelijk: de betalingstermijn, het rek. nummer, de begunstigde en de plaatsnaam. Nu zijn er drie mogelijke begunstigden. Met VBA worden die drie toegevoegd aan een keuzelijstje. Ik zou alleen graag willen op het moment dat de begunstigde gekozen wordt, het bijbehorende rek. nr en de plaatsnaam in het formulier ingevuld wordt.

    Tevens de volgende vraag: welke eigenschap moet ingesteld worden zodat de cursor niet in een veld geplaatst kan worden. Het veld moet alleen een waarde laten zien. Verder mag de gebruiker er niets mee kunnen.

    Wie weet raad??
  • Wie anders :-)

    Ik weet niet hoe je nu je combobox precies met waarden vult, maar dat zal zoiets zijn:

    Private Sub UserForm_Initialize()
    ComboBox1.ColumnCount = 3
    ComboBox1.AddItem "Naam"
    ComboBox1.List(0, 1) = "Rekening"
    ComboBox1.List(0, 2) = "Plaats"
    End Sub

    Je kan dan naar de 2e kolom in de combo verwijzen met

    ComboBox1.Column(1)

    Je krijgt dan dus iets van

    .Bookmarks("rekening").Range.Text = ComboBox1.Column(1)

    Voor de plaats (3e kolom) verwijs je dan naar ComboBox1.Column(2). Als je een ListBox gebruikt ipv een combo dan kun je daar op dezelfde manier mee omgaan.

    Je kan van een tekstvak (bijv Bedrag) tijdens designtime in het venster eigenschappen de eigenschap Enabled op False zetten om invoer tegen te gaan. Ik gok dat je er dan met code dus nog wel een bedrag naar kan schrijven.
  • Ik heb m'n combobox (tav) als volgt gevuld. Hierbij meteen de rest van de code:
    [code:1:a10e910aa8]Private Sub Userform_initialize()
    With tav
    .AddItem "Naam1"
    .AddItem "Naam2"
    .AddItem "Naam3"
    End With
    End Sub

    Private Sub tav_AfterUpdate()
    If tav.Value = "Naam1" Then
    plaats.Value = "Plaatsnaam1" And rekening.Value = "123"
    End If
    If tav.Value = "Naam2" Then
    plaats.Value = "Plaatsnaam2" And rekening.Value = "456"
    End If
    If tav.Value = "Naam3" Then
    plaats.Value = "Plaatsnaam3" And rekening.Value = "789"
    End If
    End Sub[/code:1:a10e910aa8]

    Op deze manier wil ik dus de velden plaats en rekening van de juiste waarden voorzien.
    Als je het nog ziet zitten Paulus, zou je dan nog een keertje willen kijken naar deze code?? Daarbij meteen de vraag hoe ik de eerste waarde uit de combobox als standaardwaarde kan tonen.

    Weet jij een website oid met voorbeelden van dit soort zaken of een andere plek waar ik informatie vandaan kan halen. Heb twee boekjes liggen, maar die geven net niet de zaken die ik nodig heb. Wederom alvast bedankt!
  • Je hebt het nu een beetje omslachtig, met 3 tekstvakken, maar dat kan ook. Je kan dan toch gewoon naar plaats.Value en rekening.Value verwijzen om in de footer de gewenste gegevens te zetten? Zover ben je denk ik al.

    Ik zou ook die meerkoloms-combobox es proberen als ik jou was, kijk dan ook naar de eigenschap ColumnWidths.

    Je hebt nu 3 keer If onder elkaar om aan de hand van tav iets te doen. Daarvoor is Select Case uitgevonden. Die is wat sneller omdat niet altijd alle criteria geevalueerd hoeven te worden. Als het Naam1 is, gaat ie meteen de Select weer uit en bij 3 If's zouden ook altijd de andere 2 If's geevalueerd worden. Maar waar hebben we het over, is in dit geval vooral handig op een 486 :-)
    [code:1:ad35e939b2]Select Case tav.Value
    Case "Naam1"
    plaats.Value = "Plaatsnaam1" And rekening.Value = "123"
    Case "Naam2"
    plaats.Value = "Plaatsnaam2" And rekening.Value = "456"
    Case "Naam3"
    plaats.Value = "Plaatsnaam3" And rekening.Value = "789"
    End Select[/code:1:ad35e939b2]
    Eerste item selecteren doe je met:
    ComboBox1.value = "Naam1" (dus de naam die in je eerste item staat, of de waarde die in de eerste kolom staat). Dan treedt meteen de change-event op waardoor plaats en rekening worden ingevuld.

    Ik heb op mijn website over Word VBA nog een bak voorbeelden en een kort cursusje staan.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.