RapportExporteren

Status
Niet open voor verdere reacties.

NickMeeder

Gebruiker
Lid geworden
15 jul 2009
Berichten
14
Hoi,

Ik heb een formulier met op elke pagina offerte gegevens. Nu heb ik een rapport gemaakt met daarin de benodigde velden (export). vervolgens heb ik een button gemaakt in het formulier en wanneer ik daar op klik maakt Access een PDF alleen pakt Access alle records uit dit formulier en niet alleen diegene die ik wil hebben.

Ik heb dit via de wizard knop gedaan omdat ik niet zo'n vba held ben.

Wie kan mij helpen? alvast bedankt!

Gr,
Nick
 
Je zal op de een of andere manier toch één record moeten filteren uit de recordset, want het rapport dat je hebt gemaakt gebruikt nu nog alle records uit de tabel. Ik ga er daarom voor het gemak maar van uit, dat je op je formulier één record ziet, en dat het geen doorlopend formulier is.

Als je niet wilt programmeren, kun je het volgende doen:
1. Open het rapport in de ontwerpweergave
2. Ga naar de Eigenschappen van het rapport, en selecteer bij <Gegevens>, <Recordbron>.
3. Klik op de knop met drie puntjes
Als je een tabel gebruikt, vraagt Access of je een query wilt maken; dan Ja klikken, anders kom je al gelijk in de query. ALs je een nieuwe query moet maken, alle tabellen uit de tabel selecteren en naar het onderste deel slepen. Niet het * nemen, want je moet een filtering kunnen maken op een specifiek veld.
4. Zoek het veld op dat je op het formulier gebruikt om records op te zoeken, bijvoorbeeld KlantID.
5. Klik in de regel Criteria van het KlantID (voorbeeld...) en klik daarna op de knop <Opbouwen> ( of <Ctrl>+<F2>. Je komt in de Opbouwfunctie voor Expressies.
6. Dubbelklik op <Forms>, en <Alle Formulieren>.
7. Klik op het formulier dat je gebruikt om het rapport af te drukken, en zoek in de middelste kolom het keuzeselectievak op dat je gebruikt om een KlantID op te zoeken. (Als je slim bent geweest, heb je die cboKlantID genoemd, en kun je hem snel terugvinden. Veel mensen kijken daar niet naar, en moeten dan op zoek naar een naam als <Keuzelijst met invoervak14>, wat natuurlijk niet heel erg duidelijk is...)
8. Klik op <Plakken>, en op <OK>

Als het goed is gegaan, heb je nu het klantID veld gebruikt als filtering voor het rapport. Als je nu het formulier opent, en een klant opzoekt, zal je zien dat je een rapport krijgt voor één klant.

Mocht je er niet uitkomen, dan horen we dat wel weer!

Michel
 
Bedankt Michel!

Ik heb hebt uitgevoerd en het werkt op die manier. Het enige is wel dat ik een parameter moet opgeven (in dit geval het offerte nummer). Uiteraard is dit niet heel erg alleen wellicht verwarrend voor de gebruikers. Wanneer je daar nog wat op weet hoor ik het graag. alsnog bedankt! :thumb:
 
Wanneer wordt die parameter gevraagd? Ik kan me voorstellen dat die vraag komt als je het rapport zelfstandig opent, want dan kan hij het formulier niet vinden. Tenzij je nog een andere parameter gebruikt?

Michel
 
hij vraagt het wanneer ik van ontwerpweergave naar normale weergave ga EN wanneer ik in het formulier zelf zit en op de knop rapportmaken druk (ondanks dat ik dan in een een record zit).

Dit is de eerste en enige parameter tot nu toe in mijn database.
 
Dit gebeurt doorgaans als er een verkeerde verwijzing ergens in een element zit, zoals een verkeerde keuzelijstnaam. Het kan ook voorkomen als de gevraagde informatie, in dit geval dus de informatie uit het formulier, nog niet beschikbaar is voor de query/rapport. Als je overschakelt naar de ontwerpweergave, en het formulier is niet geopend in de formulierweergave, en er is nog geen record geselecteerd, dan kan ik het mij dus wel voorstellen, want je vraagt iets op uit een formulier dat nog niet beschikbaar is.
Deze methode heeft dan ook nadelen, zoals je al hebt gemerkt...
Persoonlijk los ik dit probleem op in VBA, waarbij ik het record dat op het formulier is geselecteerd in een varibele zet, die vervolgens aan het rapport wordt meegegeven. Dit heeft als voordeel dat er nooit meer om een parameter wordt gevraagd, en dat je het rapport altijd kunt openen, zonder dat het formulier open hoeft te zijn.
Als je daar toch over wilt denken, dan kunnen we de code die je daarvoor nodig hebt wel posten; de knop heb je immers al.

Michel
 
Ik heb nog gekeken maar kan helaas niet achterhalen of er ergens een verkeerde verwijzing zit. Wanneer je een VBA code hebt zou dat mooi zijn want dan vul ik die in en dat scheel dan een stap met het maken van een rapport. Ik hoor graag van je.

Nick
 
Ik gebruik tegenwoordig onderstaande truc, die ik achter de keuzelijst zet waamee ik de filtering maak, bijvoorbeeld op de eigenschap <Na bijwerken> :

Code:
    sTabel = Trim(Me.RecordSource)
    If Not Left(UCase(sTabel), 6) = "SELECT" Then
        sTabel = "SELECT * FROM " & sTabel
    Else
        sTabel = "SELECT * FROM " & sTabel
    End If
    If InStr(1, sTabel, "WHERE") > 0 Then
        sTabel = sTabel & " AND [Veldnaam] = " & Me![Keuzelijst]
    Else
        sTabel = sTabel & " WHERE [Veldnaam] = " & Me![Keuzelijst]
    End If
    Me.RecordSource = sTabel
    Me.Requery

Hierin wordt in eerste instantie de bron van het formulier opgehaald. Daarbij wordt gekeken of we te maken hebben met een SQL statement, of een tabel of query.
In de tweede If wordt gekeken of er al een filtering in de query zit. Dit is van belang, omdat je maar één keer Where kunt gebruiken, maar wel meer regels met AND kunt toevoegen. (Of Or natuurlijk...)
Daarna wordt de nieuwe query losgelaten op het formulier, zodat je de geselecteerde records ziet.

Om het rapport in te stellen gebruik ik onderstaande code die achter de knop zit:

Code:
    sTabel = Me.RecordSource
    stDocName = "rNetwork_Resultaten"
    DoCmd.OpenReport stDocName, acViewDesign, , , acHidden
''    sRapport = Reports![rnetwork_resultaten].RecordSource
''    MsgBox sTabel & vbLf & vbLf & sRapport
    Reports![rnetwork_resultaten].RecordSource = sTabel
    DoCmd.Close acReport, "rNetwork_Resultaten", acSaveYes
    DoCmd.Close acForm, "fData_Results", acSaveNo
    DoCmd.OpenReport stDocName, acPreview

Hier zit de grap in de regel: 'DoCmd.OpenReport stDocName, acViewDesign, , , acHidden'
Deze regel opent het rapport in de Hidden modus, zodat je de Recordsource kunt opvragen in een variabele, en vervangen door de query die je op het formulier gebruikt. Daarna sla je het rapport op, en kun je het zichtbaar opnieuw openen. De Msgbox zit er tusen, als je wilt controleren wat de broncode en de nieuwe code voor het rapport is.

Try Before you Buy!

Michel
 
Ik heb nu de onderstaande code ingevoerd.

Code:
Private Sub Send_Quotation_click()
    sTabel = Me.FrmQuotationComplete
    stDocName = "Quotation_EMEA_TRANSPORT"
    DoCmd.OpenReport "Quotation_EMEA_TRANSPORT", acViewDesign, , , acHidden
    sRapport = Reports![Quotation_EMEA_TRANSPORT].RecordSource
    MsgBox sTabel & vbLf & vbLf & sRapport
    Reports![Quotation_EMEA_TRANSPORT].RecordSource = sTabel
    DoCmd.Close acReport, "Quotation_EMEA_TRANSPORT", acSaveYes
    DoCmd.Close acForm, "FrmQuotationComplete", acSaveNo
    DoCmd.OpenReport stDocName, acPreview
End Sub

maar ik krijg de volgende foutmelding:

*De expressie geeft niet de naam van een macro, een naam van een door de gebruiker gedefineerde functie of een [gebeurtenisprocedure] als resultaat
* Er is een fout opgetreden bij het evalueren van een functie gebeurtenis of macro
 
Bijna goed....
Eén dingetje vergeten!

Code:
Private Sub Send_Quotation_click()
    sTabel = Me.FrmQuotationComplete[B][COLOR="Red"].RecordSource[/COLOR][/B]
    stDocName = "Quotation_EMEA_TRANSPORT"

Michel
 
Ik krijg nog steeds dezelfde foutmelding. Ik heb nu onderstaande code.
Code:
Private Sub Send_Quotation_click()
    sTabel = Me.FrmQuotationComplete.RecordSource
    stDocName = "Quotation_EMEA_TRANSPORT"
    DoCmd.OpenReport "Quotation_EMEA_TRANSPORT", acViewDesign, , , acHidden
    sRapport = Reports![Quotation_EMEA_TRANSPORT].RecordSource
    MsgBox sTabel & vbLf & vbLf & sRapport
    Reports![FrmQuotationComplete].RecordSource = sTabel
    DoCmd.Close acReport, "Quotation_EMEA_TRANSPORT", acSaveYes
    DoCmd.Close acForm, "FrmQuotationComplete", acSaveNo
    DoCmd.OpenReport stDocName, acPreview
End Sub

bij sTabel verwijs ik naar het formulier en niet zozeer naar de onderliggende tabel. Zou het daaraan kunnen liggen?

Gr,
Nick
 
Wat geeft de Msgbox terug?
Die zou, als het goed is gegaan, de bron van het formulier, en de bron van het rapport moeten laten zien.
De bedoeling van de hele grap is natuurlijk de string die je maakt met sTabel, want daar moet de filtering in staan. Het zou kunnen zijn, dat je een tekststring als filtering gebruikt. In dat geval moet de filtering met quootjes worden uitgebreid:

Ziet er dan zo uit:

sTabel = sTabel & " WHERE [Veldnaam] = '" & Me![Keuzelijst] & "'"

Kun je dus de tekst van de msgbox hier plaatsen, als dit niet werkt? Voor je eigen gemak zou je dan de Msgbox kunnen vervangen door een Inputbox:

tmp=Inputbox("","",sTabel)

Michel
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan