Optellen/delen van 2 velden in 1 record

Status
Niet open voor verdere reacties.

meinco

Gebruiker
Lid geworden
25 jan 2008
Berichten
9
Ik ben een beginneling in het maken van formules in Access

Ik heb een simpele database EIGENAREN met een Tabel Eigenaren en formulier Eigenaren
puur voor eigen gebruik

Nu wil ik veldnaam "jaarbedrag" / "aantal maanden" en de uitkomst zien in veldnaam "maandbedrag", dit alles binnen 1 record

Bij elk nieuw in te voeren record moet dit dan automatisch gaan werken.

Wie kan mij daar bij helpen, Hoe doe ik dit en waar vul ik de formule(s) in.

Meinco
 
Als je je databank hier kan posten dan kan ik er wel iets van maken
 
Jouw probleem is relatief simpel op te lossen:

Stap 1. Zorg ervoor dat je in je tabel een veld [maandbedrag] hebt om de waarde op te slaan. Aangezien het een deling is, een getalveld dat ook cijfers achter de komma opslaat, dus geen integer.
Stap 2. Zet het veld ook op je formulier, gekoppeld aan het veld [maandbedrag] .
Stap 3. Er vanuit gaande, dat je de waarden op het formulier invult, en wilt berekenen, zet je op de twee velden <Jaarbedrag> en [Aantal maanden] een gebeurtenisactie <Na bijwerken>, die de waarde voor je uitrekent.

Code:
Private Sub Jaarbedrag_AfterUpdate()

    Me.[Maandbedrag].Value = Val(Me.[jaarbedrag].Value) / Val(Me.[aantal maanden.Value) 

End sub

Dezelfde formule zet je ook op de <Na bijwerken> gebeurtenis van het veld [aantal maanden], want je wilt beide getallen kunnen veranderen en opnieuw latn berekenen.

Om het verhaal af te maken, zet je de formule ook op de gebeurtenis <Bij Aanwijzen> van het formulier, zodat de berekening elke keer wordt uitgevoerd als je naar een ander record gaat; je wilt immers altijd de goede uitkomst zien.

Om het helemaal af te maken, zou je nog een paar checks kunnen inbouwen op de waarden die je kunt veranderen, om er zeker van te zijn dat er getallen worden ingevoerd, en geen tekst, maar dat is van later zorg. In ieder geval zou ik voor het veld [maandbedrag] de eigenschap <Ingeschakeld> op Nee zetten, en <Vergrendeld> op Ja, zodat de berekening niet handmatig kan worden aangepast.

Kun je hier weer wat verder mee? Anders heb ik wel een simpel voorbeeldje voor je.

Michel
 
Database Eigenaren

Bekijk bijlage Eigenaren.zip

Hallo, ontzettend aardig dat u mij wilt helpen.
Ik heb van iemand anders de formule, onder jouw reactie, hier inmiddels ook al ingevuld, doch daar gaat ook iets mis.

In het formulier en tabel vind je de velden:

[Bijdrage_per_jaar] / [Maanden] [Bijdrage_per_maand]

Met vriendelijke groet,

Meinco
 
Bekijk bijlage Eigenaren.zip

Michel, ontzettend bedankt voor je reactie

Ik heb de database maar even bijgevoegd, er zit toch nog een fout in en weet niet hoe het op te lossen. Gaarne jou expertise

In het formulier en tabel vind je de velden:

[Bijdrage_per_jaar] / [Maanden] [Bijdrage_per_maand]

Met vriendelijke groet,

Meinco
 
Hoi Meinco,

Je had 'm bijna goed, maar er zat inderdaad een klein foutje in; de formule moet als volgt zijn:

Code:
Me.[Bijdrage_per_maand].Value = Val(Me.[Bijdrage_per_jaar].Value) / Val(Me.[Maanden[B]][/B].Value)

Zoals je ziet, hoort de rechte haak (]) achter het woord Maanden te staan; hij stond bij jou achter het woord Value.
Rechte haken gebruik je om veldnamen met spaties te kunnen gebruiken in VBA expressies, zoals Val in deze formule. Ze zijn niet expliciet nodig als in de veldnaam geen spatie zit, maar voor het gemak gebruik ik ze meestal wel, om te voorkomen dat ik ze een keer vergeet.

Overigens zou ik de formule als volgt aanpassen:

Code:
If Not IsNull(Me.Maanden) Then
    Me.[Bijdrage_per_maand].Value = Val(Me.[Bijdrage_per_jaar].Value) / Val(Me.[Maanden].Value)
End If

Dit voorkomt een deelfout, als het veld Maand leeg is (delen door nul).

Michel
 
Michel,

Toppie, het functioneert, geweldig, hartstikke bedankt.:thumb:

Ik neem aan dat ik op de zelfde wijze deze formule ook kan gebruiken voor optellen, aftrekken en vermenigvuldigen.

Ik heb nog een vraag als dat mag: Hoe kan ik in het veld DATUM, telkenmale automatisch de huidige datum (datum vandaag) laten zien, Ik wil het veld HuidigeDatum en LidSinds van elkaar aftrekken om de uitkomst in het veld AantalJaren te tonen. Kan dat met dezelfde formule maar dan met de operator -

Met vr gr

Meinco
 
Dat kan uiteraard; je kunt de datum op tabelniveau standaard laten invullen, of je kunt het op het formulier regelen. Voor de laatste optie selecteer je in het ontwerpscherm het datumveld, en zet je bij de gegevens bij Standaardwaarde de formule =Date(). Dan krijg je de huidige datum.

Om datumvelden van elkaar af te trekken, zet je er in je VBA code de conversieopdrachte CDate([Datum]) omheen, zodat de datum ook als datum wordt beschouwd.

Michel
 
Michel, als ik nog een keer zo vrij mag zijn.
Ik snap niet hoe ik de formules in dit geval moet opbouwen

De datum automatisch werkt, maar nu de rest nog.

Het resultaat moet zijn:

LidSinds - Datum_Vandaag met als uitkomst Jaren_Lid

Moeten de formules dan ook weer bij alle velden achter "Na bijwerken"worden ingevuld.

Met vr gr.

Meinco
 
Hoi Meinco,

Als je het werkelijjke verschil in jaren wilt, kun je de twee datums niet zomaar van elkaar aftrekken; een datum is uiteindelijk een getal, en je trekt dus in wezen twee getallen van elkaar af, met als uitkomst een nieuw getal in dagen. Dat moet je dan weer omrekenen naar jaren, en dat lukt natuurlijjk niet helemaal zuiver, met schrikkeljaren en zo.

Het beste is dan ook de functie DateDiff te gebruiken. Hiermee kun je heel specifiek aangeven welk verschil je wilt zien.

De formule ziet er als volgt uit:

Code:
Jaren_Lid=DateDiff("yyyy";[LidSinds];Date())

De formule zet je dan in de NaBijwerken events van de velden die je zelf verandert, dus LidSinds, en <BijAanwijzen> van het formulier, zodat bij elk volgend record dat je opent de formule opnieuw wordt berekend.

Michel
 
Michel,

Hij geeft een fout bij de puntkomma achter ("yyyy";

De formule ziet er als volgt uit:

Code:
Jaren_Lid=DateDiff("yyyy";[LidSinds];Date())

Na enig zoekwerk in de helpfunctie kam ik erachter dat de ; een , moest zijn en de () achter Date weglaten.

Private Sub Lid_Sinds_AfterUpdate()

Jaren_Lid = DateDiff("yyyy", [Lid_Sinds], Date)

End Sub

Ik begin het al een klein beetje te snappen, bedankt voor de hulp en hoop dat ik nog eens een keer een beroep op je mag doen.

Meinco
 
Laatst bewerkt:
Je mag uiteraard altijd een beroep doen, dat spreekt voor zich!
De verschillen in code worden veroorzaakt doordat mijn voorbeeld is gemaakt m.b.v. een query. In VBA moet je inderdaad (als dat zo is ingesteld tenminste) de ; vervangen door een ,. Het commando Date() zal Access overigens automatisch verbeteren, als de rest van de syntaxis tenmiste klopt.

Je kunt de formule dus ook eenvoudig in een query inbouwen, die je dan bijvoorbeeld als bron voor een formulier gebruikt.

Michel
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan