Filteren op huidige datum met VBA

Status
Niet open voor verdere reacties.

Artemiss

Gebruiker
Lid geworden
13 feb 2009
Berichten
130
Hoi,

Ik probeer vanuit VBA een tabel te openen en deze vervolgens te filteren op de datum van vandaag.
De code die ik daarvoor heb geschreven is:

Code:
Dim MyDate As Date
MyDate = Date

    DoCmd.OpenTable ("Facturatie")
    DoCmd.ApplyFilter , "Factuurdatum = MyDate"



Maar als ik dit draai, verschijnt zo'n boxje voor het invullen van een parametervalue. Weet iemand wat ik fout doe, want voor zover ik kan zien heb ik precies gedaan wat in de Help-functie van VBA staat
 
Laatst bewerkt door een moderator:
Hoi,

Ik probeer vanuit VBA een tabel te openen en deze vervolgens te filteren op de datum van vandaag.
De code die ik daarvoor heb geschreven is:

Dim MyDate As Date
MyDate = Date

DoCmd.OpenTable ("Facturatie")
DoCmd.ApplyFilter , "Factuurdatum = MyDate"



Maar als ik dit draai, verschijnt zo'n boxje voor het invullen van een parametervalue. Weet iemand wat ik fout doe, want voor zover ik kan zien heb ik precies gedaan wat in de Help-functie van VBA staat

Probeer eens met DoCmd.ApplyFilter , "Factuurdatum = #" & MyDate & #" ?
 
In VBA moet je de amerikaanse datumwijze 'ombouwen' of specifiek filteren, want 6-9 en 9-6 worden nog wel eens omgedraaid. Ik zou het zo doen:

Code:
"CDbl([FactuurDatum]) = " & CDbl([MyDate])

Wat je fout deed: je maakte de vergelijkingsdatum onderdeel van de tekststring. Vandaar de vraag om de parameter, want Mydate bestaat dan niet. Je moet dus in je filter de datum(waarde) toevoegen als getal of datum aan het filter "Factuurdatum = "
 
Laatst bewerkt:
Bij mijn vorige reactie was ik een " voor het laatste # vergeten.
Probeer dit eens:
Code:
DoCmd.ApplyFilter wherecondition:="FactuurDatum= #" & MyDate & "#"


Wat Octafish schrijft is zeker waar als je de variabele zou baseren op bvb een keuzelijst, met de date functie denk ik niet dat dit probleem zich stelt.

Begrijp wel niet waarom je met een variabele werkt, waarom niet rechtstreeks met de date functie?
 
Laatst bewerkt door een moderator:
Niet alleen bij een keuzelijst.... Zodra je vanuit VBA een datumfilter naar een rapport of formulier stuurt, kun je een datumprobleem krijgen. In dat geval is voorkomen uiteraard beter dan genezen. Wat ook prima werkt (met dank aan Allen Brown):

Code:
Const strcJetDate = "\#mm\/dd\/yyyy\#"  'Do NOT change it to match your local settings.
strWhere = "(FactuurDatum= " & Format(MyDate, strcJetDate) & ")"
 
Dank, zowel reneemettrie als Octafish,
Ik ben eerst gegaan voor de methode van Reneemettrie en dat werkte goed en toen ook nog maar even de "CDbl([FactuurDatum]) = " & CDbl([MyDate]) van Octafish en ook dat werkt goed, dus daar laat ik het maar bij.

De reden dat ik met een variabele werk, is omdat ik dit overgenomen heb uit de Help-functie. In eerste instantie had ik ook gewoon Date direct aan het filter toegevoegd. Maakt het heel veel uit qua snelheid of geheugengebruik, want ik kan het natuurlijk gewoon weer aanpassen.
 
Qua snelheid zal je geen verschil merken. Hooguit dat het niet hoeven te declareren van een variabele geheugenruimte uitspaart. Maar dat verschil is dermate miniem, dat je daar niks van gaat merken.
Een reden om met een variabele te werken zou kunnen zijn dat je een variabele vaker gebruikt in een routine. Overigens zou ik mijzelf aanleren om een datum altijd om te rekenen naar een getal, zoals in mijn suggestie. Zoals ik al zei, je weet niet altijd of een datum goed wordt geconverteerd of niet. Daarom gebruik ik dus een oplossing die 100% de juiste datum oplevert. Als je een mogelijke fout simpel kunt elimineren, waarom zou je dat dan niet doen?
 
Ja, daarom heb ik het ook maar gehouden op de door jou aangegeven manier.
Nogmaals bedankt voor de hulp weer!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan