Filter op datum in rapport

Status
Niet open voor verdere reacties.

huizemeul

Gebruiker
Lid geworden
17 mrt 2013
Berichten
105
Beste Helpdesk,
Ben met database bezig maar kom er niet uit.

Ik wil filteren op datum en hiermee een rapport openen.
Heb een formulier gemaakt frm_Datum_Filteren. Hierin een knop met rapport openen.
De eerste twee data's doen het.
De laatste twee jaar en maand werken ook.
Nu wil ik dat het rapport geopend wordt op de aangegeven laatste twee. Dus jaar en Maand.
Krijg de formule niet werkend.
Wie wil naar mijn geknutsel kijken? Zie bijgevoegd .rar
Gr. huizemeul
 

Bijlagen

Een paar dingen vallen wel op. De minst onschuldige:
Code:
    Set dbs = CurrentDb
Waarom gebruik je dit object? Wordt verder nergens meer aangeroepen. Kan dus weg.
Iets minder onschuldig:
Code:
        DoCmd.OpenReport stDocName, acPreview, sFilter
Je hebt sFilter op de plek van FilterName gezet. Lijkt logisch, is dat echter niet. Deze plek gebruik je voor een (als query) opgeslagen filter en dat heb jij niet. Je moet de volgende positie gebruiken:
Code:
        DoCmd.OpenReport stDocName, acPreview, ,sFilter
Maar dan nog gaat het niet werken, omdat je in je keuzelijsten geen datum ophaalt maar een RelatieDataID. En daar staat (volgend foutje) al een filter in:
Code:
        Month([Datum])=([Maand?])
Maanden kun je het beste op een getal filteren, niet op de naam ervan. En dat is (jawel, weer een foutje ;) ) wat je nu in de keuzelijsten zet.
Code:
        sFilter = "[Maand] = " & Me.Keuzelijst29 & ")"
Dus in eerste instantie probeer je het veld [Maand] te matchen met RelatieDataID, wat niet kan, en daarnaast probeer je het getal '5' te matchen met het woord 'mei'. Je snapt natuurlijk wel dat dit ook niet kan.

Kortom:
1. je rapport zelf moet géén filter hebben, want dat komt uit het formulier.
2. Je kunt niet filteren op velden die je niet hebt. In de tabel [Relaties_Data] heb je een veld [Datum], geen veld [Maand] of [Jaar]. Je zult dus op datum moeten filteren.
 
Hallo

Kom er nog steeds niet uit!
Heb de code aangepast maar deze werkt nog niet op mijn keuzelijsten.
Zullen nog "grote" fouten in zitten.
Graag nog enige hulp.
Misschien zijn de keuzevakken niet correct aangemaakt?

Gr. Huizemeul
 

Bijlagen

  • Vba Code Datum zoeken.jpg
    Vba Code Datum zoeken.jpg
    75,4 KB · Weergaven: 57
Je gaat een beetje van de drup naar de regen, vrees ik. Het filter sFilter = " Keuzelijst27 " kan natuurlijk nooit een filter opleveren. Een filter bevat altijd een veldnaam en een filterwaarde. Die laatste komt dan uit je keuzelijst. Nogmaals: je tabel bevat geen veld met de namen van de maanden (en hoeft die ook niet te hebben, want je hebt de datums al) dus je kunt nooit op die namen filteren zo.
 
Beste

Het gaat me niet goed af.
Ik wil de code voor VBA maken maar gaat niet lukken.

Heb in de database frmDatumbereik met een macro!! gemaakt. Die werkt.
In frmdatumbereik1 wil ik geen macro maar de code voor VBA hebben. Dan kan de macro weg.

Graag even naar kijken. De Startdatum en Einddatum geven wel de Data's maar hij opent hiermee niet het rapport op de juiste manier


Hulp geboden want drie dagen stoeien geeft geen goed humeur!!!!

Gr.Huizemeul
 
Kun je de db zoals je hem nu hebt plaatsen? Kunnen we zien wat de bedoeling is a.d.h.v. de macro versie.
 
Beste

Dat was ook de bedoeling. Dacht dat ik dat al had gedaan.
Bij deze alsnog.

De goede klopt niet helemaal............

Gr. Huizemeul
 

Bijlagen

Als je de macro goed had bekeken, had je gezien dat het filter op een heel andere manier wordt gemaakt als jij doet. Die constructie had je natuurlijk wel na moeten bouwen :). Maar het kan veel en veel mooier....

Code:
Private Sub Ok_Click()
Dim strRapport As String
Dim strDatumVeld As String
Dim sFilter As String
Dim lngView As Long
Const strcJetDate = "\#mm\/dd\/yyyy\#"  'Do NOT change it to match your local settings.
    
    strRapport = "rptDatumbereik"
    strDatumVeld = "[Datum]"
    lngView = acViewPreview     'Gebruik acViewNormal als je gelijk wilt afdrukken.
    
    'Filter opbouwen met één of twee datums
    If IsDate(Me.Startdatum) And Not Me.Startdatum = vbNullString Then
        sFilter = "(" & strDatumVeld & " >= " & Format(Me.Startdatum, strcJetDate) & ")"
    End If
    If IsDate(Me.Einddatum) And Not Me.Einddatum = vbNullString Then
        If sFilter <> vbNullString Then sFilter = sFilter & " AND "
        sFilter = sFilter & "(" & strDatumVeld & " < " & Format(Me.Einddatum + 1, strcJetDate) & ")"
    End If

    'Rapport sluiten als het nog open is; anders werkt het filter niet goed.
    If CurrentProject.AllReports(strRapport).IsLoaded Then DoCmd.Close acReport, strRapport
    
    'Rapport openen met filter
    Debug.Print sFilter        'Controleren van de inhoud van de string in het venster Direct.
    DoCmd.OpenReport strRapport, lngView, , sFilter

End Sub

In dit voorbeeld kun je ervoor kiezen om één van de 2 datumvelden, of zelfs beide, leeg te laten; het filter blijft dan toch werken. Overigens hoort er nog een extra check bij, vind ik. De einddatum mag natuurlijk nooit voor de begindatum liggen! Da's onmogelijk namelijk! Dus in dat geval moet je het filter uit kunnen zetten.
 
Beste OktaFish

:D:D

Hartelijk dank voor je bericht.

Het verschil tussen begin en einddatum zou ik in de validatieregel gezet hebben.
Begindatum =<[einddatum]
Einddatum =>[begindatum]

Maar die van jouw is natuurlijk beter.

Ga hier even mee aan de slag.
Laat het je nog even weten.

huizemeul
 
Beste OktaFish

:cool:

Beste OctaFish,

Mijn hartelijke dank voor de juiste oplossing.
Die is precies wat ik voor ogen had.
Toppie!!

Deze zeur heeft nog een vraag?

Hoe zou ik een begroting in mijn database kunnen maken?

Moet ik de vraag als beantwoord melden en deze vraag opnieuw indienen?
Of kan het zo. Wat is gebruikelijk?

Gr. Huizemeul
 
Ter lering ende vermaeck de uitwerking van zoals ik het zou doen.
 

Bijlagen

Beste OctaFish

Of ik leg het niet goed uit of we snappen elkaar niet!

Ik wil graag een lijst Begroting maken.
Zie Excel bestand.

Gebaseerd op categorie, relatienaam en de maanden.
Deze moeten ook automatisch hierin geplaatst worden.
Misschien wil ik wel te veel. Zeg het gerust.

Hoop dat je deze zeur nog wilt helpen?

Gr. Huizemeul
 

Bijlagen

Mijn vorige antwoord was nog op je filter vraag. Het is sowieso handiger om voor een compleet andere vraag een nieuw topic te maken, want helpers kijken vaak naar het onderwerp om te zien of een vraag binnen hun scope valt of niet. En je laatste vraag heeft natuurlijk niets met filteren te maken...
Maar ik kijk uiteraard wel even naar je excelletje :).
 
Dat was snel :). Er staat namelijk niks in !? Hoe moeten we nu zien wat je bedoeling is? Wat wil je zien in de rijen?
 
Beste OctaFish

Sorry ik dacht dat dat begrepen werd.

Ik zal wat secuurder moeten omschrijven.


Ik wil iets hebben een tabel, query of rapport die dit voor mij uitvoert.
Ik voer in met frmInvoer-relaties. Daarna moet het automatische gaan.
Ik denk dat daar ook VBA voor in aanmerking komt?

Het bestand Excel moet dan in mijn Access database komen.

Hoop dat je nu begrijpt wat ik zou willen.
Sorry voor mijn niet goed beschreven vraagstuk.

Huizemeul
 

Bijlagen

Ik vermoedde al zoiets :). Dat kun je makkelijk maken met een Kruistabel query. Daarbij moet je de datum converteren naar tekst (naam maand met de formule Format("mmmm";[Datum]) ) en de maand als kolomkop definiëren. Daarbij heb je dan nog wel een klein probleem: de maanden worden alfabetisch gesorteerd, en probeer jij dan Februari maar eens ná Januari te krijgen :). Of, wat je waarschijnlijk ook wel zal willen, alle maanden te laten zien ongeacht of daar wat staat of niet. Maar daar is uiteraard ook een trucje voor.
 
Beste Octafish

Het de kruistabel aangemaakt. Hoop dat hij zo moet zijn?
De maanden heb ik voor elkaar gekregen maar er wordt alleen een cijfer (aantal) ingebracht.
Heb diverse manieren uitgeprobeerd maar kom steeds op hetzelfde of helemaal niets!

Er zal iets waarschijnlijk wat in de criteria moeten worden gezet zodat deze de bedragen gaat neerzetten?
Dat kan ik niet vinden hoe je dit zou moeten omzetten naar bedragen.
Volgens mij staan de maanden nu goed maar ondanks proberen met "mmmm" ipv "mmm" werkt niet naar voluit geschreven maanden januari ipv Jan ???

Gaarne nog wat bijspijkeren zodat het wel zou gaan.
De bedragen en de maanden

Gr.huizemeul
 
Normaal gesproken kun je op elk getalveld ook de functie SOM gebruiken als AANTAL ook werkt. Dus dat zou je probleem op moeten lossen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan