data's naar keuze als criterium/sortering voor rapport

Status
Niet open voor verdere reacties.

kuyt1

Gebruiker
Lid geworden
8 mrt 2012
Berichten
24
Hallo allemaal,

Ik heb een algemeen rapport opgemaakt waarin allemaal gegevens in verwerkt zijn. Nu heb ik hiernaast een formulier gemaakt, deze wordt door de gebruiker gebruikt, en in dit formulier kan de gebruiker bepaalde criteria's instellen voor de gegevens die hij zichtbaar wil hebben. Als voorbeeld is er een kopje status, wanneer de gebruiker hier 'gereed' invult en vervolgens op de printknop drukt, laat het rapport alles zien waar de status gereed is. Hij zou hiernaast ook bijv. afdeling kunnen pakken om een overzicht van de afdeling te creëren met de onderdelen die daar gereed zijn.
Nu heb ik dit in tekst vormen, dit werkt allemaal prima, maar nu kom ik met datums en hier kom ik niet uit..
Mijn tekstvorm code voor bij het klikken op de print knop:

Code:
Private sub Knop 72_Click()

Dim statussen As string
Dim afdelingen As string

keuze_statussen.SetFocus
statussen = keuze_statussen.text

keuze_afdelingen.SetFocus
afdelingen = keuze_afdelingen.text

If afdelingen = "" and statussen = "" then
DoCmd.Openreport "overzicht", acViewReport
Elseif afdelingen = "" then
DoCmd.Openreport "overzicht", acViewReport, , "[status] = ' " & statussen & " ' " 
Elseif statussen = "" then
DoCmd.Openreport "overzicht", acViewReport, , "[afdeling] = ' " & afdelingen & " ' " 
Else
DoCmd.Openreport "overzicht", acViewReport, , "[afdeling] = ' " & afdelingen & " ' AND  [status] = ' " & statussen & " ' " 

End if
End sub

keuze_afdelingen is de verzonnen naam van het tekstvak.
Nu wil ik dit dus hebben met datums. Zowel de invoer voor het criterium en in het rapport is het datum/tijd als gegevenstype.
Dit moet voor [Aangemaakt] en [Ontvangst] (datum aangemaakt en datum ontvangst)

Heb zelf al een aantal dingen geprobeerd, zoals
Code:
Dim datumaan As date
maar hoe stel ik dan vervolgens datumaan = keuze_aangemaakt.????
Maar krijg foutmeldingen als ' typen komen niet met elkaar overeen' of ' gegevenstypen komen niet overeen in criteriumexpressie'

Iemand de oplossing voor deze beginner (a)?
 
Een datum filteren via VBA is een beetje tricky, omdat je te maken hebt met de Amerikaanse datumnotatie die in VBA gebruikt wordt. Je moet het datum(tekst)veld dus op de juiste manier vertalen naar een datumfilter. Ik heb daar, met dank aan Robert Allen, een functie voor gemaakt. Da's deze:

Code:
Function DatumFilter(DatumVeld As String, Optional StartDatum As Date, Optional StopDatum As Date) As String
'Note: Filter uses "less than the next day" in case the field has a time component.
Dim strWhere As String
Const strcJetDate = "\#mm\/dd\/yyyy\#"  'Do NOT change it to match your local settings.
    
    'Build the filter string.
    If IsDate(StartDatum) And StartDatum > 0 Then
        strWhere = "(" & DatumVeld & " >= " & Format(StartDatum, strcJetDate) & ")"
    End If
    If IsDate(StopDatum) And StopDatum > 0 Then
        If strWhere <> vbNullString Then
            strWhere = strWhere & " AND "
        End If
        strWhere = strWhere & "(" & DatumVeld & " < " & Format(StopDatum + 1, strcJetDate) & ")"
    End If
    DatumFilter = strWhere
    Exit Function

Err_Handler:
    If Err.Number <> 2501 Then
        MsgBox "Error " & Err.Number & ": " & Err.Description, vbExclamation, "Geen filter gemaakt."
    End If

End Function
Op een formulier gebruik ik 'm dan zo:

Code:
Private Sub cboStartDatum_Click()
    If IsNull(Me.cboEindDatum) Then
        [B]sFilter = DatumFilter("CursusDatum", Me.cboStartDatum)[/B]
    Else
        [B]sFilter = DatumFilter("CursusDatum", Me.cboStartDatum, Me.cboEindDatum)[/B]
    End If
    Me.Form.Filter = sFilter
    Me.Form.FilterOn = True
End Sub
Zoals je in de laatste code ziet, wordt er op twee manieren een datumfilter gemaakt: de eerste variant maakt een filter met één datumveld (uit de keuzelijst cboStartDatum), de tweede variant gebruikt zowel de keuzelijst cboStartDatum als de keuzelijst cboEindDatum.

Op die manier kun je altijd en overal een datumfilter maken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan