Filteren op waarde uit combobox

Status
Niet open voor verdere reacties.

AterBruggen

Gebruiker
Lid geworden
3 apr 2011
Berichten
13
Hallo allemaal,

Ik zat met een probleem om mijn doorlopend formulier te filteren op waardes uit meerdere comboboxen, en vond elders op dit forum de oplossing van Octafish.
En dit werkte na een kleine aanpassing (Moest nl. ook op datum filteren), perfect in mijn geval.
Dit werkte helaas op 2 januari van dit jaar niet meer....heel vreemd
Nu is mijn vraag, heb ik dan toch ergens een foutje gemaakt.

Heb wel wat kennis van VBA, maar haal toch veel oplossingen van het internet, en zodoende toch mijn kennis daarin kan uitbreiden.
Het stukje aangepaste (gekopieerde) code van de functie ziet er zo uit:

Code:
Function Filteren()
Dim sWhere As String

If Me.cmbDatum.Value & "" <> "" Then
If Not sWhere & "" = "" Then sWhere = sWhere & " AND "
sWhere = sWhere & "[Datum] = #" & Me.cmbDatum & "#"
End If
If Me.cmbGebied.Value & "" <> "" Then
If Not sWhere & "" = "" Then sWhere = sWhere & " AND "
sWhere = sWhere & "[Gebied]=""" & Me.cmbGebied & """"
End If
If Not sWhere & "" = "" Then
Me.Filter = sWhere
Me.FilterOn = True
Else
Me.Filter = ""
Me.FilterOn = False
End If

End Function

alvast dank,

Bram
 
Laatst bewerkt:
Ik gebruik deze variant om op datums te filteren nooit, en wel omdat er een magistrale fout optreedt: je filtert in je formulier op Nederlandse datumnotatie, en je programmeert op basis van Amerikaanse. Dus je denkt dat je filtert op 2 januari, maar je code maakt een filter voor 1 februari. En dat levert geheid andere datums op :). Je moet dus je datums vanuit het formulier op de een of andere manier converteren naar de Amerikaanse datumnotatie voordat je het filter toepast. Dat kan op 2 manieren: een correcte opmaak meegeven, of (en dat doe ik meestal) de datum uit je keuzelijst converteren naar een getal en die waarde in het filter terug converteren naar een datum. Kijk maar welke variant het beste werkt.

Code:
Const strcJetDate = "\#mm\/dd\/yyyy\#"  'Do NOT change it to match your local settings.
    If Me.cmbDatum.Value & "" <> "" Then
        If Not sWhere & "" = "" Then sWhere = sWhere & " AND "
        sWhere = sWhere & "[Datum] = " & Format(Me.cmbDatum, strcJetDate) 
    End If
Deze code gebruikt de gekozen datum en zet er de juiste opmaak bij.

Code:
    If Me.cmbDatum.Value & "" <> "" Then
        If Not sWhere & "" = "" Then sWhere = sWhere & " AND "
        sWhere = sWhere & "[Datum] = CDate(" & CDbl(Me.cmbDatum) & ")"
    End If
Deze code converteert de datum naar een getal (met CDbl) en zet hem in het filter weer terug naar een datum met CDate.
 
Laatst bewerkt:
Ik zal dit later vandaag eens proberen.
Al vindt ik het wel vreemd dat hij nu problemen geeft.
De records met datums van vorig jaar laat hij wel gewoon zien wanneer ik deze selecteer in de combobox :rolleyes:
maar goed, ik ga het proberen.

in ieder geval bedankt
 
Sommige datums (met name die waarvan de dag groter is dan 12) gaan sowieso wel goed, omdat Microsoft ook wel weet dat er maar 12 maanden in een jaar gaan. Maar ik weet natuurlijk niet of dat het geval was. De werkwijzen hierboven gaan in ieder geval altijd goed, en dat lijkt mij dus alleen daarom al aan te raden :D.
 
Klopt, daar was ik inmiddels al achter:)
Kon ook niet langer wachten om het te proberen...je kent dat vast:D
heb beide codes geprobeerd, en succes bij de eerste.
Al moest ik wel het ) verwijderen tussen de "" , want die diende nergens voor ;)

In ieder geval werkt het weer prima

Hartelijk dank voor de snelle reactie :thumb:

gr. Bram
 
Dat haakje was blijven staan uit een ander voorbeeldje, waar hij wél nodig was. De tweede optie zou trouwens ook moeten werken :).
 
aha, vandaar

Zal die andere later nog eens gaan proberen.
Voor nu gaat dit eerst goed.

zal dit draadje nu opgelost zetten

nogmaals dank :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan