Tellen

Status
Niet open voor verdere reacties.

Sytse1

Gebruiker
Lid geworden
9 aug 2007
Berichten
584
Office versie
miDer
In een doorlopend formulier kan de gebruiker het veld Aanwezig (een ja/nee veld) afvinken.
De waarde is dan True c.q. ja.
In het formulierkoptekst wil ik een berekend veld (Teller) met daarin vermeld het aantal ja geselecteerden.
Het getoonde aantal moet bij plaatsen of weghalen van het vinkje direct geactualiseerd zodat direct het aantal geselecteerden wordt getoond.
Zowel bij het plaatsen of het weghalen van het vinkje.
Het actualiseren gebeurd natuurlijk na bijwerken van het veld aanwezig.
Wellicht moet dit met een procedure
Welke VBA code zou ik moeten gebruiken?
Graag een reactie en vast bedankt.
Sytse
 
De waarde is dan True c.q. ja.
Nee; beide aannames zijn fout. De waarde is in werkelijkheid -1 voor Ja/Waar en 0 voor Nee/Onwaar.

Het actualiseren gebeurd natuurlijk na bijwerken van het veld aanwezig.
Zou ik ook niet doen; gebruik de <Bij klikken> gebeurtenis. Dan zie je gelijk het resultaat.

Maar ja, je hebt een procedure nodig. Maar dat is een hele simpele. Eerst maar even de oplossing. Zoals ik al aangaf, heeft een selectieveldje 2 waarden: 0 en -1. dat betekent dat je heel simpel kunt controleren hoeveel velden zijn aangevinkt, want daarvan is de waarde -1. De andere records hebben de waarde 0. Dus het enige dat je hoeft te doen is om het veld op te tellen met SUM. Omdat je, als je alleen SUM gebruikt, een negatief getal krijgt, zou ik dat getal met ABS omzetten naar een positief getal.
Dus in je tekstveld in je koptekst zet je de formule
Code:
=ABS(SUM([chkSelectie]))
Deze formule wordt normaal gesproken één keer berekend, bij het openen van het formulier. Daarna is de formulierweergave 'bevroren'. Eventuele wijzigingen worden dus wel in de tabel doorgevoerd, maar niet op het formulier getoond. Het formulier moet dus worden bijgewerkt. En dat zou ik dus doen bij de eigenschap <Bij klikken> van het selectievak. En daar zet je dan de code:
Code:
Me.Requery
En dat zou bij elkaar genoeg moeten zijn.
 
Hallo Octavish,
Zoals met alles, als je het weet is het eenvoudig.
In de hulpmodule eindeloos gezocht en geen oplossing kunnen vinden.
Wellicht te moeilijk gezocht. Ik had gebruikt =Aantal([Aanwezig]) maar dit geeft het totaal aantal records niet de geselecteerden.
Je oplossing werkt natuurlijk uitstekend. Alleen bij klikken het Docmd gebruikt.
Bedankt voor je oplossing en tot de volgende keer, want ik loop ongetwijfeld weer tegen een voor mij onoplosbaar probleem op.
Groet,
Sytse
 
Hallo Octavish,
Wellicht kan je nog even helpen met het volgende.
Zoals al aangaf heb ik de requery gezet bij klikken.
Na de requery moet natuurlijk de cursor bij het record staan waarop is geklikt en niet bij record 1
Nu wil ik dit doen met bookmark. Maar in de onderstaande code zit een fout.
Dim rs As Object
Set rs = Me.Recordset.Clone
DoCmd.Requery
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
Wellicht kan je aangeven wat fout is.
b.v.d.
Sytse
 
Je zou rs als Recordset kunnen declareren, al doet Microsoft het zelf ook met Object.
 
Bij beiden Recordset en Object krijg ik een foutmelding bij Me.Bookmark = rs.Bookmark
 
Probeer het eens zo:
Code:
Dim lngID As Long
Dim rstClone As Recordset

    lngID = Me.Uitg_nr
    Me.Form.Requery
    Set rstClone = Me.RecordsetClone
    With rstClone
        .FindFirst "Uitg_nr=" & lngID
        If Not .NoMatch Then
            Me.Form.Bookmark = .Bookmark
        End If
        .Close
    End With
    Set rstClone = Nothing

Uiteraard nog wel even de veldnaam aanpassen :).
 
Geweldig bedankt.
Werkt uitstekend.
:thumb:
Sytse
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan