<>= tekens gebruiken bij selectie in doorlopend formulier

Status
Niet open voor verdere reacties.

danny88

Gebruiker
Lid geworden
14 apr 2011
Berichten
70
Mijn doorlopend formulier is gebaseerd op query waarin de volgende filters (met hulp van OctaFish) in voorkomen.

Code:
Maandfilter: IIf(IsNull([Forms]![frm_OmzetOverzicht]![fldZoekMaand]);Waar;Month([Factuurdatum])=[Forms]![frm_OmzetOverzicht]![fldZoekMaand])

Code:
Jaarfilter: IIf(IsNull([Forms]![frm_OmzetOverzicht]![fldZoekJaar]);Waar;Year([Factuurdatum])=[Forms]![frm_OmzetOverzicht]![fldZoekJaar])
Als ik 3 in tik laat hij alle records zien van de maand maart.
Maar is het mogelijk door gebruik te maken van tekens, bijvoorbeeld =<3 dat dan de records van Maand 1 t/m 3 getoond worden?
 
Laatst bewerkt door een moderator:
Volgens mij nog steeds met dezelfde vergelijking:
Code:
Maandfilter: IIf(IsNull([Forms]![frm_OmzetOverzicht]![fldZoekMaand]);Waar;Month([Factuurdatum])<=[Forms]![frm_OmzetOverzicht]![fldZoekMaand])
Het criterium <>Onwaar geldt namelijk nog steeds.
 
Bij criterium staat uiteraard nog steeds <>onwaar.

Alleen laat hij nu alleen de records zien van bijvoorbeeld de maand februari als ik 2 in tik.
Maar is het ook mogelijk om de records te tonen van januari t/m februari doormiddel van <3 in te tikken in het zoekveld?

Is dit mogelijk of zal je dan met vba aan de slag moeten?
 
Door, zoals ik al aangaf, het < voor het = teken te zetten. Of, als je een willekeurige reeks wilt maken, een Between variant.
Code:
Maandfilter: IIf(IsNull([Forms]![frm_OmzetOverzicht]![fldZoekMaand]);Waar;Month([Factuurdatum])Between [Forms]![frm_OmzetOverzicht]![fldZoekMaand] And [Forms]![frm_OmzetOverzicht]![fldZoekMaand2])
 
Sorry Michel, bij je eerste reactie had ik niet goed gekeken.
Snap wat je bedoelt, alleen wat ik wil is:

Als ik in het veld fldZoekMaand 3 in tik dat hij alleen de maand 3 laat zien, maar als ik
<= 4 in het veld fldZoekMaand in tik dat hij de records van maand 1 t/m 4 laat zien.

Sorry dat ik zo lastig bent.
 
Ik heb het nu zo opgelost:
Code:
Maandfilter: IIf(IsNull([Forms]![frm_OmzetOverzicht]![fldZoekMaand]);Waar;IIf(Left([Forms]![frm_OmzetOverzicht]![fldZoekMaand];1)="<";Month([Factuurdatum])<Mid([Forms]![frm_OmzetOverzicht]![fldZoekMaand];2);Month([Factuurdatum])=[Forms]![frm_OmzetOverzicht]![fldZoekMaand]))

Weet niet of het een juiste manier is, maar het werkt wel.

Hoe kan je meerdere debiteur nummers laten zien?
Bijvoorbeeld door het intikken van debiteur nr 1000;1008;1040 en dat hij deze nummers laat zien.
 
Ik zou, bij ingewikkelder selecties, de selectie niet meer in de query maken, maar op een formulier. Meerdere debiteuren bijvoorbeeld laat je dan via een keuzelijst kiezen. Daarbij bouw je het filter op met VBA, en zet je het als één string in de query.
 
Laatst bewerkt:
Bedankt Michel voor je reactie.
Heb een voorbeeld bijgevoegd wat ik gemaakt heb. frm_Omzetoverzicht.
Is het hierin mogelijk om een selectie van meerdere debiteuren te maken?

Bekijk bijlage Voorbeeld.zip

Heb je misschien een voorbeeld hoe jij het op zal zetten om een doorlopend formulier te filteren?
 
Laatst bewerkt:
Een doorlopend formulier filtervoorbeeld heb ik wel. Bekijk deze maar eens. Overigens doe jij dat ook ;)

In de db zit ook een voorbeeld van filteren op meerdere criteria; dus misschien heb je hier al genoeg aan.
 

Bijlagen

Het filteren op meerdere criteria werkt al bij mij.
Ik kan bijvoorbeeld voor jaar: 2011 intikken en voor maand: 3 dan krijg ik de records met deze criteria.

Als ik op de ... klikt bij debiteurnaam, wordt er een formulier geopend waarin ik een klant kan selecteren.
Nu wil ik meerdere debiteuren selecteren waarop hij filtert.
Ben er wel achter dat ik een ja/nee veld in de tabel debiteur moet opnemen.

Kan uit het voorbeeld niet zoiets vinden waarin ik meerdere velden kan selecteren en dat hij vervolgens daarop filtert.

Heb je ook nog een tip voor een boek over vba voor access?
 
Laatst bewerkt:
Tenzij ik mij heel sterk vergis, zit er helemaal rechts in mijn voorbeeld een kolom waarmee je handmatig records kunt seleceren met selectievakjes....
 
Je vergist je niet OctaFish.

Heb de hele code bestudeerd en zelf uitgeprint om er iets van te begrijpen, maar gaat toch boven me pet.
Weet niet of je me verder opweg kan helpen, anders zet ik deze vraag op afgehandelt.

Heb nog wat andere vragen in het verschiet.
 
Waar loop je precies tegen aan? De code is inderdaad redelijk gecompliceerd, zeker als je 'm niet zelf hebt gemaakt :D Dan moet je a.h.w. eerst in de huid van de programmeur kruipen om de denkwijze te achterhalen. Dus als je een specifieke vraag hebt, probeer ik een concreet antwoord te verzinnen!
 
Loop niet echt tegen iets aan, maar snap het gewoon niet. :(

Dit is de code waarmee de regels gefilterd worden in jouw voorbeeld.

Code:
Private Sub Bijschrift83_Click()
Dim chkFilter As String

    If Not Me.Filter & "" = "" Then
        sFilter = Me.Filter & " " & sAndOr & " [Rapport] = -1"
    Else
        sFilter = "[Rapport] = -1"
    End If
    Me.Filter = sFilter
    Me.FilterOn = True
    Me.Requery
    
End Sub

Het stukje wat ik begrijp is [Rapport] = -1.:o

Wat ik wil in Jip en Janneke taal is:
Vanuit frm_OmzetOVerzicht kan het formulier frm_Omzetzoekdebiteur geopend worden
hier kan ik door dubbelklikken op het debiteurid of debiteurnaam en wordt frm_Omzetzoekdebiteur gesloten en het debiteurid op frm_OmzetOVerzicht in het veld fldZoekDebiteurid gezet en vervolgens wordt frm_OmzetOVerzicht gefilterd op dat debiteur nr.

Alleen nu wil ik ook graag meerdere debitueren selecteren.
Dus frm_OmzetOVerzicht moet dan gefilterd worden op debiteurID1 and debiteurID 4 and debiteurID100.

Heb echt al 2 uur lang gegoogled en jouw code bestudeerd maar kan echt voor mijn idee niets bruikbaars in vinden.
Als je een hint kan geven waar ik mee moet beginnen, kan ik weer verder zoeken.
 
De code is, zoals je al had begrepen, gebaseerd op een selectievakje. Dat vak is gekoppeld aan een tabelveld, want je wilt tenslotte per record kunnen filteren. In jouw geval kun je ook filteren met bijvoorbeeld een meervoudige keuzelijst. Ik had die uitklapoptie op het formulier ook wel gezien, maar eerlijk gezegd zit ik nog niet goed genoeg in deze access versie om te zien wat-ie nou eigenlijk doet; ik zie zo snel niet hoe je op basis daarvan selecties kunt maken.
Jij gebruikt nu een dubbelklik op het veld DebeteurID om het formulier OmzetOVerzicht te openen. Dat werkt uiteraard alleen maar als je één waarde kunt selecteren. Wil je er meer, dan moet je een meerkeuzelijst hebben. Die meerkeuzelijst moet alle opties aflopen, en de geselecteerde waarden samenvoegen in een Filter, gescheiden door " OR ". Een filter ziet er dan uit als: "debiteurid = 1 OR debiteurid = 4 OR debiteurid = 100".
Dat filter combineer je vervolgens weer met je andere filterinstellingen.
 
Ben er mee aan de slag gegaan en heb wat gevonden (oude post van jouw OctaFish).
Alleen hoe zorg ik ervoor dat het formulier gefilterd wordt?

De bedoeling is (hoe het nu werkt), ik open het formulier frm_OmzetOverzicht. Hier kan ik dan op allerlei manieren filteren. Als ik bijvoorbeeld het debiteurnummer van een klant niet uit mijn hoofd weet, klik ik op de puntjes, zoek de klant en dubbelklik ik erop.
Deze zet dan het debiteurnummer in mijn zoekveld (filter).


Dit is de code die ik nu heb gevonden:
Code:
Private Sub cmdFilter_Click()
DoCmd.OpenForm "frm_OmzetOverzicht", acNormal, , strFilter
End Sub

Private Sub lstSelecteerklant_AfterUpdate()
Dim Keuze As Variant
Dim strFilter As String

    For Each Keuze In lstSelecteerklant.ItemsSelected()
        If Len(strFilter) <> 0 Then strFilter = strFilter & " OR "
        strFilter = strFilter & "[DebiteurID]=" & lstSelecteerklant.Column(0, Keuze) & ""
    Next Keuze

End Sub
 
Ik snap de knop met de puntjes nog niet helemaal; kun je op deze manier meerdere debiteurnummers selecteren? Zo niet, dan heeft de bovenstaande code niet zoveel zin. Die is echt bedoeld om vanuit een normale keuzelijst (dus zonder invoervak) te werken. En dan moet die lijst ook nog op <Meervoudige selectie>=Enkelvoudig of Uitgebreid staan.
 
Heb een keuzelijst aangemaakt zonder invoervak. Dit opgemaakt uit je reactie van Gisteren om 16:41. Deze staat ingesteld op enkelvoudige selectie.

In eerste instantie had ik een doorlopend formulier (frm_OmzetZoekDebiteur) aangemaakt met selectievakjes. Deze opende ik vanuit mijn frm_OmzetOverzicht
Hier kon ik de klant opzoeken en door dubbelklikken op het record werd het frm_OmzetOverzicht gefilterd op die klant.

Maar als je eenmaal bezig bent wil je meer en meer. Dus wil ik ook eventueel meerdere debiteuren kunnen selecteren en vervolgens frm_OmzetOverzicht filteren op die meervoudige selectie.

Heb het voorbeeld bijgevoegd, het is alleen Access 2007.

Bekijk bijlage Voorbeeld.zip
 
Laatst bewerkt:
Zul je tot vanavond moeten wachten :)
 
Je filter is op zich niet verkeerd, maar omdat je knop Filter niet helemaal goed is, gebeurt er niks. Wat is er aan de hand? Je filter wordt opgebouwd op basis van een actie op de keuzelijst (wat prima is) maar de filter variabele werkt alleen zolang de procedure wordt uitgevoerd. En als je op de knop Filter klikt, dan is de filter variabele leeg, en heb je geen filter. Door het filter in de algemene sectie van de module te zetten, blijft hij gevuld als de procedure is uitgevoerd. En bestaat hij dus ook nog als je op de Filter knop klikt. De aanpassing die je moet maken is dus deze:

Code:
Option Compare Database
[B][COLOR="navy"]Dim strFilter As String[/COLOR][/B]

Private Sub cmdFilter_Click()
    DoCmd.Close acForm, Me.Form.Name
    DoCmd.OpenForm "frm_OmzetOverzicht", acNormal, , strFilter
    
End Sub

Private Sub lstSelecteerklant_AfterUpdate()
Dim Keuze As Variant
strFilter = ""

    For Each Keuze In lstSelecteerklant.ItemsSelected()
        If Len(strFilter) <> 0 Then strFilter = strFilter & " OR "
        strFilter = strFilter & "[DebiteurID]=" & lstSelecteerklant.Column(0, Keuze) & ""
    Next Keuze

End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan