Een filter in een formulier plaatsen

Status
Niet open voor verdere reacties.

lisannethreels

Gebruiker
Lid geworden
14 apr 2020
Berichten
40
Hallo allemaal,

Ik wil graag een filter in een formulier plaatsen.
De bedoeling is dat in een combo box alle werknemers geselecteerd kunnen worden (dit zijn er 8) en wanneer er een werknemer is geselecteerd, alleen alle projecten te zien zijn waar deze werknemer bij is betrokken. De filter moet op 4 rijen worden gezet als dat mogelijk is.
Kunnen jullie mij hierbij helpen?

Alvast bedankt.
 
Ik snap niet helemaal wat je bedoelt, want je spreekt jezelf volgens mij een beetje tegen. Dat begint al hier:
De bedoeling is dat in een combo box alle werknemers geselecteerd kunnen worden (dit zijn er 8) en wanneer er een werknemer is geselecteerd
In een combobox (=Keuzelijst met invoervak) kun je altijd maar één item selecteren. Het is uiteraard geen enkel probleem om alle werknemers te laten zien, maar je kunt er maar één selecteren. Wil je er meer kunnen selecteren, dan moet je een Listbox (=Keuzelijst) gebruiken.

En dit:
.. alleen alle projecten te zien zijn waar deze werknemer bij is betrokken. De filter moet op 4 rijen worden gezet als dat mogelijk is.
snap ik ook niet helemaal. Ofwel je laat 4 records zien, ofwel je laat alle records zien. Je vraagt om alles te laten zien.

Daarnaast is de vraag: hoe toon je de projecten nu? In een keuzelijst? Doorlopend formulier? Als je maar 4 records wilt zien, dan is het een kwestie van de hoogte van je keuzelijst of subformulier zodanig hoog maken, dat je er niet meer dan 4 ziet. Wil je er fysiek niet meer dan 4 in hebben, dan is het de vraag: welke vier? De eerste? De laatste? De laatste openstaande? Kortom: iets meer duidelijkheid graag :).
 
Kan je geen hoof/subformulier gebruiken?
Hoofdformulier toont de gegevens van de werknemer en het subformulier toont alle projecten waar die werknemer aan meewerkt. Die kan je dan vie de ID aan elkaar linken en als je door de werknemers bladert zie je automatisch alleen de projecten waar deze werknemer bij betrokken is.
 
Hallo Octafish en NoellaG,

Misschien wordt het nu duidelijker met de bijgevoegde afbeelding. (De namen zijn deels zwart gemaakt ivm privacy)

Wat ik wil is --> Bij I Am kies je jouw naam uit de dropdown en vervolgens zie je in het formulier alleen de projecten (1e kolom) waarin jouw naamt is ingevuld (2 en/of 3e kolom).
uitleg.png
 
Hallo Octafish en NoellaG,

Misschien wordt het nu duidelijker met de bijgevoegde afbeelding. (De namen zijn deels zwart gemaakt ivm privacy)

Wat ik wil is --> Bij I Am kies je jouw naam uit de dropdown en vervolgens zie je in het formulier alleen de projecten (1e kolom) waarin jouw naamt is ingevuld (2 en/of 3e kolom).
Bekijk bijlage 348582
 
Dat is eenvoudig met een paar regeltjes VBA uit te voeren. Ik neem aan dat je in jou combobox de naam toont, maar de ID onthoudt/wegschrijft.
Dan moet je de eigenschappen van de combobox op het scherm zetten en in de event tab bij de AfterUpdate eigenschap een event procedure kiezen en invullen als in het volgende voorbeeld (natuurlijk de namen van jou app gebruiken):

Private Sub cboMyCombo_AfterUpdate()
Me.Filter = "[FieldName] = " & Me.txtEmployeeID
Me.FilterOn = True
End Sub
 
Is simpel te doen, zonder rekening te houden met het aantal records dat je ziet (waarom wil je er 4 zien?
Code:
Private Sub cboIAM_Click()
     If Me.cboIAM = "" Then
          Me.Filter = "" 
          Me.FilterOn = False
     Else
          Me.Filter = "[Medewerker] = " & Me.MedewerkerID
          Me.FilterOn = True
     End If
End Sub
 
Beide bedankt. Het is gelukt!

Octafish, ik wil niet vier kolommen laten zien maar de filter hoeft maar uit 4 kolommen de juiste naam filteren en niet uit alle kolommen (want daar staan geen namen in).
 
Ikke niet snappe :). Je begon je vraag met:
De filter moet op 4 rijen worden gezet als dat mogelijk is.

En nu zeg je:
Octafish, ik wil niet vier kolommen laten zien maar de filter hoeft maar uit 4 kolommen de juiste naam filteren en niet uit alle kolommen

In een keuzelijst met invoervak kun je meerdere kolommen laten zien. Dat mogen er 4 zijn of acht, maakt allemaal niet uit. Er wordt altijd maar met één kolom gewerkt, en dat is de afhankelijke kolom. Meestal is dat een ID veld dat je niet wilt zien, dus de breedte daarvan zet je doorgaans op 0cm. Maar de overige kolommen in je keuzelijst hebben verder niets met het aantal rijen in die keuzelijst te maken. En elke kolom die je ziet in die keuzelijst, pakt dus automatisch hetzelfde record, in jouw geval: dezelfde naam.
Verder kun je als eigenschap in een keuzelijst het aantal Rijen vastleggen. Standaard staat dat op 16, maar daar kun je dus (is dát wat je bedoelt?) ook op 4 instellen. Dán heb je dus wellicht de door jou gewenste 4 rijen? Overigens heeft het aantal rijen dat je daar instelt alleen invloed op de hoogte van de keuzelijst als je hem aanklikt; verder doet-ie niks. En je snijdt jezelf ook alleen maar in de vingers, want als je in totaal 8 personen hebt, dan is er toch niks op tegen om de lijst gelijk in zijn geheel te zien? Met slechts 4 zichtbare rijen moet je nog scrollen ook! Dus je helpt jezelf volkomen nodeloos aan een muisarm :). Maar hopelijk begrijp ik het nog steeds helemaal verkeerd, en bedoel je wat anders...
 
Hi Octafish,

Ik bedoel inderdaad wat anders dan jij. Kan het alleen niet goed uitleggen vrees is... Maar het is goed gekomen :thumb:
 
Als ik het niet snap, dan vermoedelijk een hoop medelezers ook niet. En aangezien dit een forum is waarin we ook de lezers willen helpen, is het wellicht handig als je nog even uitlegt wat je precies gedaan hebt. Ter lering ende vermaeck :).
 
Zoals ik het begrepen heb wil je kunnen filtreren op de 4 velden die namen bevatten, niet?
 
Ja dat klopt Noella, maar Octafish gaf al aan dat de filter wordt toegepast over het hele formulier en je niet hoeft te selecteren op welke kolommen de filter van toepassing dient te zijn.
 
Ok, dan is het helemaal belangrijk dat je aangeeft hoe je het hebt opgelost, want met één keuzelijst op vier velden filteren is behoorlijk ingewikkeld, laat staan over alle velden. Dat laatste lijkt mij zelfs onmogelijk (met tekst op een numeriek veld filteren?) Ik zet er wel wat op dat de meeste lezers van dit forum dat niet zelf kunnen maken. Ik wel uiteraard, want ik heb de oplossing regelmatig gegeven in dit forum. Dus toch maar wat uitleg graag voor de anderen:). Kan ik gelijk zien of je het op de beste manier hebt gedaan :D.
 
Niet zo moeilijk toch? Gewoon de voorwaarden via een or verbinden

....." where fld1 = " & me.cboX & " or field2 = " & me.cboX & " enzovoort....
 
@noella: kun je TS niet antwoord laten geven? Het is dacht ik niet jouw vraag...
 
Hallo allemaal,

Ik heb een textveld gemaakt met I Am. Vervolgens een combo box met deze code (zie bijlage) en wanneer ik nu een naam selecteer zijn alleen de projecten zichtbaar van die persoon.
 

Bijlagen

  • Capture.PNG
    Capture.PNG
    11,8 KB · Weergaven: 55
Kijk, zo had ik 'm dus niet opgelost. En noella ook niet :). Screen.ActiveControl ís een beetje onbetrouwbaar (kan ook een knop zijn bijvoorbeeld) maar als het werkt, dan werkt het.
 
Oh ik wist niet dat dat onbetrouwbaar was... Ik heb dit geprobeerd:

Private Sub cboIAM_Click()
If Me.cboIAM = "" Then
Me.Filter = ""
Me.FilterOn = False
Else
Me.Filter = "[Medewerker] = " & Me.MedewerkerID
Me.FilterOn = True
End If
End Sub

Maar dat werkte niet. Ik wist niet welk veld ik onjuist had gevuld dus vandaar deze macro.
 
Die code zou moeten werken op basis van één veld, het veld [Medewerker]. Dat moet dan uiteraard wel bestaan in je formulier :). Ik heb je db niet gezien (niet gepost namelijk) dus ik weet niet hoe jouw objecten heten. Ik heb als naam voor de keuzelijst cboIAM gebruikt, maar zo te zien heet die bij jou ComboMe. Je zult dus, als je dummy code van ons krijgt, zelf de namen even moeten aanpassen. Overigens zie ik nog een foutje in het voorbeeldje; dat had dit moeten zijn:
Code:
Private Sub cboIAM_Click()
     If Me.cboIAM = "" Then
          Me.Filter = ""
          Me.FilterOn = False
     Else
          Me.Filter = "[Medewerker] = " & Me.cboIAM.Value
          Me.FilterOn = True
     End If
End Sub
Je klikt op de keuzelijst, en de waarde daaruit gebruik je om te filteren. In dit geval dus een tekstveld met het MedewerkerID. Maar dat kan ook een ander veld zijn. Ik werk nooit met macro's (die van jou snap ik dus ook niet), maar altijd met VBA omdat je dan a) meer mogelijkheden hebt, en b) precies ziet wat je doet.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan