Sorry voor de rar

. Mocht je alsnog een zipje willen, dan krijg je die natuurlijk wel.
De code die ik gebruik is eigenlijk redelijk simpel (daarom doe ik het natuurlijk ook zo

). Ik gebruik in jouw db 2 stukken code:
De eerste is eigenlijk niet nodig, maar vind ik zelf wel handig. Ik heb je 2 tekstvakken voor de datums vervangen door 2 keuzelijsten die de datums ophalen uit je tabel. Met een query die er zo uitziet:
Code:
SELECT DISTINCT opnamedatum FROM Tabel1 ORDER BY opnamedatum;
voor de Begindatum en
Code:
SELECT DISTINCT Tabel1.opnamedatum FROM Tabel1 WHERE (((Tabel1.opnamedatum)>[Formulieren]![Formulier1]![begindate])) ORDER BY Tabel1.opnamedatum;
voor de laatste. De 2e keuzelijst filtert op de eerste keuzelijst, zoals je kunt zien. En met DISTINCT zorg je er voor dat elke datum maar één keer voorkomt in de lijst. Meer hoeft uiteraard niet. De 2e keuzelijst moet worden bijgewerkt als er in de eerste keuzelijst iets is gekozen:
Code:
Private Sub begindate_Click()
Me.enddate.Requery
Me.enddate = ""
End Sub
Ik maak 'm ook gelijk leeg, voor het geval je wat anders wilt kiezen. De knop doet dus het eigenlijke werk:
Code:
Private Sub Knop5_Click()
Dim strSQL As String
Dim iStartDate As Double, iEndDate As Double
Dim qDef As QueryDef
iStartDate = CDbl(Me.begindate)
iEndDate = CDbl(Me.enddate)
strSQL = "SELECT persoon, opnamedatum, a, b, c, d, e, f, g, h, j FROM Query1 " _
& "WHERE ([opnamedatum] Between CDate(" & iStartDate & ") And CDate(" & iEndDate & "));"
Set qDef = CurrentDb.QueryDefs("query3")
qDef.SQL = strSQL
DoCmd.OpenQuery "query3"
End Sub
De truc is heel eenvoudig, en lost een heel groot probleem op dat je hebt als je met VBA op datums gaat filteren. Namelijk het probleem: is 8-5-2014 nu 8 mei, of 5 augustus? Oftwel: is de datum Amerikaans, of Europees? Als het beide kanten op kan, pakt VBA altijd de Amerikaanse variant, en dan filter je verkeerd. De oplossing is: vertaal de
gekozen datum eerst naar een getal (met iStartDate = CDbl(Me.begindate) en vertaal het getal in de query terug naar een datum (met CDate(iStartDate)). En dat doe je natuurlijk ook voor de einddatum.
Wat ik verder graag doe, is de SQL van de query aanpassen door de selectie er 'hard' in te zetten. En dat doe je met de QueryDef collectie.
Dus als je de techniek verder wilt toepassen, dan kun je de code simpel kopieeëren en plakken.
Of, mooier nog, maak er een functie van die de WHERE string opbouwt, en vul die met de velden waar je mee wilt werken. Dan hoef je alleen de functie aan te roepen met de 2 parameters.