Filteren op datum

Status
Niet open voor verdere reacties.

john64

Gebruiker
Lid geworden
12 jun 2011
Berichten
268
Goedenavond forum,

Op een formulier wil ik kunnen filteren op datum. Dat doe ik door 2 onafhankelijke velden te gebruiken waar met datDatumVan en datDatumTot
Na drukken op een knop "zoek" wordt VBA uitgevoerd om het juiste filter samen te stellen.
Code:
txtTotaalFilter = txtStatusFilter & txtZoekFilter 'regel is hier geplaatst om even tussenresultaat uit te kunnen lezen
Me.Filter = txtStatusFilter & txtZoekFilter
Me.FilterOn = True

In scherm lokale variabelen staan deze gegevens (filters worden opgebouwd door een aantal controles uit te voeren)
: txtZoekFilter : " AND ([DatumConstatering] >= #1-4-2013#)" : String
: txtStatusFilter : "(NOT [Geverifieerd])" : String
: txtTotaalFilter : "(NOT [Geverifieerd]) AND ([DatumConstatering] >= #1-4-2013#)" : Variant/String

Het resultaat is echter niet dat alle DatumConstatering >= 1-4-2013 worden vertoond (ook oudere data)

: txtTotaalFilter : "(NOT [Geverifieerd]) AND ([Datumconstatering] <= #1-5-2013#)" : Variant/String

Ook met dit filter krijg ik niet juiste resultaten

Enig idee waar de fout zit in het filter ?

mvg
John
 
Laatst bewerkt:
In vba zijn data in US formaat, dus mm/dd/yyyy
 
Goedemorgen,
Hoe kan ik deze in VBA omzetten ? op het formulier wil ik het wil in europese format (dd-mm-yyyy) laten staan
 
In Access moet je de datum een ander format meegeven. Dit werkt prima:

Code:
Const strcJetDate = "\#mm\/dd\/yyyy\#"  'Do NOT change it to match your local settings.
strDateField = "DatumConstatering"

    If IsDate(Me.datDatumTot.Value) Then
        If sFilter <> vbNullString Then sFilter = sFilter & " AND "
        sFilter = sFilter & "(" & strDateField & " < " & Format(Me.datDatumTot.Value + 1, strcJetDate) & ")"
    End If
etc. 't Is maar een voorbeeldje natuurlijk; kun je zelf wel aanpassen naar je eigen situatie.
 
Goedemorgen Michel,

Ik heb het werkend gekregen (de strcDateFormat heb ik in een module modGlobaleVariabelen opgenomen
Code:
        varWhere = varWhere & IIf(Not IsNothing(varWhere), " AND ", "") & "(DatumConstatering >= " & _
                Format(Me.datDatumVan.Value, strcDateFormat) & ")"

Nog wel 2 vragen hierbij:
- wanneer moeten er blok-haken om de veldnamen, en wanneer mogen ze weggelaten worden ?
- \#mm\/dd\/yyyy\# : wat betekenen de forward en backward slash in dit format ?
 
Blokhaken om veldnamen mag in beginsel altijd, dus je doet er niet verkeerd aan als je ze altijd gebruikt. Ze zijn verplicht op het moment dat er een spatie in een veldnaam zit. Dus Me!Veldnaam met spatie.Value geeft een foutmelding, maar Me![Veldnaam met spatie}.Value is correct. Daarom probeer ik spaties in veldnamen zoveel mogelijk te vermijden. Gebruik dan bijvoorbeeld Veldnaam_met_spatie, dat is weer één woord.

De opmaak van constante heb ik niet van mezelf, maar geleend van Allen Browne. Zijn uitleg: de Format functie vervangt het scheidingsteken in de datumcode (/) door het in de landinstellingen vastgelegde scheidingsteken (in Nederland meestal '-' ). En dan werkt de code niet. Daarom moet er een '\' voor gezet worden om aan te geven dat het volgende karakter letterlijk moet worden gebruikt. Dus als je dit ("#mm/dd/yyyy#")zou gebruiken wordt dat vertaald naar "#mm-dd-yyyy#". En dan ben je weer terug bij af, want dan wordt de dag weer maand en omgekeerd. Vandaar dus alle 'harde' tekens vastleggen door er een backslash voor te zetten: "\#mm\/dd\/yyyy\#".
 
Super, het werkt in ieder geval, thnx
ik zal topic afsluiten
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan