Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

Search in een Report van Access

joop_v
14 antwoorden
  • Het programma genereert een Report met op elke pagina een brief aan iemand uit de database, met aangepaste gegevens (naam, adres, te betalen, lidmaatschap, en dergelijke).
    Omdat de lijst ongeveer 700 namen heeft, zijn er dus evenveel pagina's in het Report.
    Stel ik will kijken wat er precies staat in de pagina voor meneer Jan Jansen (of ik wil alleen die brief afdrukken). Om op die pagina te komen moet if een schatting maken van het paginanummer en dat invullen in de Navigation Box en corrigeren als ik tever of niet ver genoeg ben.

    Ik heb lang geleden ergens een code gezien om de Navigation balk te maken. Je kunt dan de originale navigation balk uitschakelen. Op die nieuwe balk zou ik wellicht een search knop kunnen plaatsen.
  • [code:1:b6e50618f4] DoCmd.OpenReport "Factuur", acViewPreview, , "[Factuurnummer] = Forms![Facturering]![Factnr]"
    [/code:1:b6e50618f4]
    dmv de code kunt u een report openen met een filter.
    in dit voorbeeld heet het report [Factuur]
    De onderliggende database bevat een veld [Factuurnummer]
    Dit "Factuurnummer" wordt vergeleken met een tekstvak in een formulier [Factnr]
    Je kunt een knop op het formulier maken om de code aan te roepen.

    Wim
  • Bedankt voor de suggestie, maar dat weet ik al. Tenmisnste als je bedoelt dat het (gefilterde) Report gegenereerd wordt door de aanroep op het formulier. De vraag gaat echteer over de situatie waarin het volledige Report al op het scherm staat. Je kunt dan naar een bepaalde pagina navigeren door een getal in te vullen in de navigatie balk. Ik zoek een manier wwarbij je bovendien in een navigatie balk een naam kunt invullen.
    Joop
  • [code:1:645fb3e6e2]Function zoek_naam()
    Dim zoekwoord As String
    zoekwoord = InputBox("geef de naam op: ", "Zoek naam")
    Reports![reportnaam].Filter = "Naam = " & zoekwoord
    Reports![reportnaam].FilterOn = True
    End Function
    [/code:1:645fb3e6e2]
    Ik heb een test gedaan met een procedure die het filter van het report goed zet.
    Als je deze procedure aanroept met een knop welke in de werkbalk van het report. (werkbalk : afdrukvoorbeeld)

    Is dat een optie?

    Wim
  • Bedankt. Het lijkt een optie. Maar waar moet ik de knop plaatsen. De zaak is dat ik al jaren de Engelse versie van Access gebruik. Ik ben helemaal niet vertrouwd met de Nederlandse woorden.
    Met 'de werkbalk' bedoel je naar ik aanneem: Toolbar. Maar wat is dan de werkbalk 'afdrukvoorbeeld'. Ik ben me nooit bewust geweest dat een report een eigen werkbalk heeft. (Een mens houdt niet op met leren). Kun je me wat verder brengen?
    Joop
  • open een afdrukvoorbeeld van het raport.
    Ga met de muis op de knoppenbalk staan en druk op de rechter toets
    kies: Customize.
    dan Tablad Commands.
    Sleep de bovenste button in de rechterlijst (Custom) naar boven in
    de knoppenbalk (Print preview genaamd).
    Laat het Customize window open staan en ga met de muis naar de nieuwe "Custom" knop en druk op de rechter toets, kies:properties
    vul bij "On actions" de procedurenaam in bv: =procedurenaam()

    Succes

    Wim
  • Ik had het moeten weten.
    Bedankt
  • Je gaf me het idee voor zoeken in een report.
    Ik gebruik nu:
    Function zoek_naamInReportNaam(filteren as Boolean)
    Dim zoekwoord As String
    If filteren = True then
    zoekwoord = InputBox("geef de naam op: ", "Zoek naam")
    Reports![reportnaam].Filter = "Naam = " & zoekwoord
    End if
    Reports![reportnaam].FilterOn = filteren
    End Function

    Nadeel is dat ik nu voor elk report zo'n functie moet maken.

    Vraag: Is er een manier waarbij de naam van het report as parameter kan worden ingevoerd:
    Function zoek_naam(reportnaam as Report, filteren as Boolean)

    Wat moet ik dan in de plaats van [reportnaam] in
    Reports![reportnaam].Filter schrijven?

    Joop

    P.S. Ik heb hetdeels opgelost door een indicator als parameter in de functie te brengen en dan met Select Case indicator te werken:
    Function zoek_naam(indicator as String, filteren as Boolean)
    enzovoort.
    Het blijft een nadeel dat ik dan voor elk report een Case met een andere waarde van de indicator moet schrijven. De functie wordt wel erg lang zo.
  • [code:1:23ad195843]Dim rptHuidigRapport As Report
    Set rptHuidigRapport = Screen.ActiveReport
    MsgBox "Huidig rapport is " & rptHuidigRapport.Name

    [/code:1:23ad195843]

    Kijk eens bij de help van ActiveReport
    Daar vond ik bovenstaande code.
    Hiermee kun je dus de naam van het openstaand rapport opvragen en
    toewijzen aan een variabele.

    Die kun je weer gebruiken om je programma aan te passen.

    Wim
  • Bedankt. Het lost nog steeds niet het probleem van
    Reports![reportname].Filter = enz
    op, maar het geeft me wel de mogelijkheid om alleen 1 tool bar te gebruiken in plaats van voor ieder report een aparte toolbar te maken. Ik kan nu de reportnaam gebruiken als indicator voor Selec Case in 1 procedure.
  • Het is de bedoeling dat je de code in een module plaats en niet onder een report. zodoende hoef je maar een code te hebben voor alle reports die je nog maakt. (zie laatste tab van de database venster [ACCESS97])

    :-?
    succes,
    Wim
  • :D
    ‘Ja, dat wist ik. Wellicht ben je ge-interesseerd in wat ik heb gedaan.
    ‘Bij het openen van een report komt er een Tool bar waarop onder een Zoek button
    ‘met in het OnAction veld: =SearchName(CurrentReport(),true)
    ‘en een Unfilter button met in het OnAction veld: =SearchName(CurrentReport(),false)

    ‘De volgende twee functies staan in een module
    Function CurrentReport()
    On Error GoTo 1 'If no Report is current, then just goto End Function
    Dim rptCurrentReport As Report
    Set rptCurrentReport = Screen.ActiveReport
    CurrentReport = rptCurrentReport.Name
    1
    End Function

    Function SearchName(rpt As String, AddFilter As Boolean) 'SearchName("DEPOSIT")
    Dim zoekwoord As String
    If AddFilter Then zoekwoord = UCase(InputBox("Enter family name: "))
    rpt = UCase(rpt)
    ‘Ucase voor de zekerheid om eventuele vergissingen op te heffen
    Select Case rpt
    ‘Nu komen een twintigtal Case-s, elke voor een ander report, die er allemaal zo uitzien:
    Case "reportname"
    If AddFilter Then Reports![reportname].Filter = "Ucase([Family name]) _
    Like '*" & zoekwoord & "*'"
    Reports![reportname].FilterOn = AddFilter

    End Select
    End Function

    ‘Het geheel werkt prima. Je hebt me een eind op het spoor gezet.
    ‘Om het helemaal mooi te maken zou ik in plaats van de Case-s een variable voor
    ‘Reports![reportname]. willen hebben.
    ‘Merkwaardigerwijze geeft het programma wel Screen.ActiveReport.Filter en
    ‘Screen.ActiveReport.FilterOn als mogelijkheid, maar bij het testen kreeg ik de
    ‘dat het attribute niet geldig is. Misschien moet er een library in de Relations van het ‘Tool menu aangevinkt worden, maar ik zou niet weten welke.
    ‘Bedaknt voor je moeite.
    ‘Joop
  • [code:1:1608104d40]Function zoek_naam()
    Dim zoekwoord As String
    zoekwoord = InputBox("geef de naam op: ", "Zoek naam")
    zoekwoord = "veldA = '" & zoekwoord & "'"
    Reports(0).Filter = zoekwoord
    Reports(0).FilterOn = True
    End Function
    [/code:1:1608104d40]
    Ik snap nu wat je bedoeld
    Ik heb even zitten oefenen en mischien is dit iets.
    Het werkt alleen maar als je maximaal 1 rapport open hebt staan.
    (danwel het eerste rapport dat geopend is)

    mischien een ideetje?

    Wim
  • Prachtig, Wim. Precies wat ik zocht.
    Bedankt
    Joop

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.