filteren op formulier om later op een rapport af te drukken

Status
Niet open voor verdere reacties.

Systeempje

Gebruiker
Lid geworden
8 sep 2009
Berichten
149
Beste,

Dit is hoop ik voorlopig weer even mijn laatste vraag
(ben zelf aan het zoeken naar een cursus Access...).

Wat ik wil:
Ik heb een rapport met factuurbedragen maar hier staan alle klanten op, klanten hebben een ID (1001, 1002, 1003 etc.). Ik wil het rapport per klant kunnen uitprinten. Nu heb ik al enige tijd gezocht op het internet en kwam de volgende code tegen:

Zetten achter klikken op een knop op je formulier.
DoCmd.OpenReport "rapportnaam",,, Me.Filter
Filteren in je formulier en dan klikken op de knop.......


Dit heb ik ook gedaan maar dan krijg ik de melding:
Fout 2212 tijdens uitvoering: Het opject kan neit worden afdrukt vanuit Microsoft Office Access.

Nu las ik dat je in een formulier ook niet moet verwijzen naar een tabel maar naar een Query. Dit heb ik dus veranderd maar dit gaf geen resultaat.

Zie ik een stapje over het hoofd?
 
Een rapport kun je baseren op een tabel of een query, net als een formulier. Dat zal ook de oorzaak van je probleem niet zijn. Ik denk eerder dat het filter dat je meegeeft aan het rapport niet goed is. Kun je de volledige code van de knop posten?
 
Code:
Private Sub Knop252_Click()
DoCmd.OpenReport "werkbonnen netwerk1", , , Me.Filter

End Sub

hier vandaan gehaald link
Maar volgens mij klopt hier ook niet de code met het rapportnaam :confused:
 
Ik neem aan, dat het rapport met die naam bestaat? En dat het is gebaseerd op een tabel of een query waar het veld KlantID ook op voorkomt?
Wat is de filtering die je op het formulier gebruikt?
 
Octafish,

Ik ben zo brutaal geweest om het bestand te e-mailen naar je..
Ik hoop dat je dit goed vindt...

Ik beloof weer om hier de oplossing te plaatsen!
 
Is op zich geen probleem, maar je voorkomt zo wel dat anderen er ook naar kunnen kijken... Daar is het forum op zich niet voor bedoeld; dus geen gewoonte van maken ;)
 
Dus hierbij het antwoord:
De code uit het voorbeeld was op zichzelf niet slecht; alleen moest er nog een filter worden gezet op het formulier, anders kan het rapport er niks mee.
Op het formulier heb ik een knop gemaakt (cmdFilter) die standaard filtert op het koppelveld van het rapport. Een ander veld kan uiteraard ook, zolang het maar voorkomt op het rapport.

Code:
Private Sub cmdFilter_Click()
Dim sFilter As String

If Me.FilterOn = True Then
    Me.Filter = ""
    Me.FilterOn = False
    Me.cmdFilter.Caption = "Opdrachtgever filteren"
Else
    sFilter = "OpdrachtgeverID=" & Me.txtopdrachtgeverID
    Me.Filter = sFilter
    Me.FilterOn = True
    Me.cmdFilter.Caption = "Filter uit"
End If
End Sub
De code is een wisselknop; d.w.z. dat hij het filter aan- en uitzet, en daarom ook de tekst op de knop aanpast.

Code:
Private Sub Knop252_Click()
     sFilter = Me.Filter
     ''MsgBox Me.Filter
     DoCmd.OpenReport "werkbonnen netwerk1", acViewPreview, , sFilter
End Sub
 
Een rapport kun je baseren op een tabel of een query, net als een formulier. Dat zal ook de oorzaak van je probleem niet zijn. Ik denk eerder dat het filter dat je meegeeft aan het rapport niet goed is. Kun je de volledige code van de knop posten?
Oke, nadeel is met een query-verwijzing. je kunt geen nieuwe record aanmaken binnen het formulier, ook werkt deze niet met de macro, openen met nieuwe record dan.​


Is op zich geen probleem, maar je voorkomt zo wel dat anderen er ook naar kunnen kijken... Daar is het forum op zich niet voor bedoeld; dus geen gewoonte van maken ;)
Oke, ik zou er geen gewoonte van maken, wat ik wel altijd die is een samenvatting/oplossing erbij zetten. In dit geval had jij dit al gedaan, bedankt :thumb:​



Dus hierbij het antwoord:
Bedankt het werkt!
Ik wilde eerst zelf filteren met het icoontje van het vergiet (filter), en daarna de knop voor het ontwerpen.
Zou dit wel mogelijk kunnen zijn?, aangezien je dan kan filteren op meerdere/verschillende records. Bedankt voor je hulp weer bedankt!! :thumb:​
 
Laatst bewerkt:
(ben zelf aan het zoeken naar een cursus Access...).

@Systeempje,

Niet allemaal cursussen, maar wel interessante informatie op te vinden.

Cursussen:

Cursus Office diverse versie's en nog een paar andere:

http://www.gratiscursus.be/

of

http://www.softwijs.nl/cursusboeken.html

Informatie en/of voorbeelden:

http://www.accesspower.nl/

sectie excel en access met videovoorbeelden

http://www.datapigtechnologies.com/index.htm

http://www.bluemoosetech.com/databasejournal.php

http://www.pcmenu.info/

http://members.chello.nl/goosvanbeek/


Voorlopig kun je hier wel mee uit de voeten geloof ik.
 
ik heb nu een vaste filtering gemaakt op één veld, maar het is niet zo moeilijk om de filtering afhankelijk te maken van meerdere velden. Daar kan ik vanavond wel naar kijken, want ben vandaag goed onder de pannen...
 
Oke Prima :thumb:.

Heeft u al tijd gehad op een voorbeeld te maken waarbij de filter afhankelijk te maken van meerdere velden.

Dit zal wel handig zijn soms willen we op groep filteren bijv. of juist weer iets anders.
 
Ben er nog even mee bezig; wil je op alle velden kunnen filteren, of een paar? En als dat laatste het geval is: welke?
 
Hoi,

Op de volgende velden:
- OpdrachtgeverID
- Opdrachtgever
- datum melding
- datum uitvoering
- datum gereed
- TL
- bedrag (kleiner dan groter dan), als dit niet te lastig is.

Eigenlijk de dingen die je ook kunt doen bij de standaard filter van Access,
 
Heb wel een ideetje; dus nog even geduld...
 
Op de meeste velden kun je prima filteren, alleen filteringen als > waarde en < dan waarde zijn niet zomaar te maken, of te combineren met een andere filtering. In 2007 is de filtering wat uitgebreid t.o.v. oudere versies, waarbij die opties wel beschikbaar zijn. Voorlopig kun je met onderstaande code filteren op een aantal velden:

Code:
Private Sub cmdFilter_Click()
Dim sFilter As String, sWaarde

sWaarde = Me(txtObject).Value
If IsNumeric(sWaarde) Then
    sFilter = "[" & Me(txtObject).ControlSource & "] = " & sWaarde
ElseIf IsDate(sWaarde) Then
    sFilter = "[" & Me(txtObject).ControlSource & "] = CDate(" & CDbl(sWaarde) & ")"
Else
    sFilter = "[" & Me(txtObject).ControlSource & "] = '" & sWaarde & "'"
End If

If Me.FilterOn = True Then
    If Me.Filter = "" Then
        Me.Filter = sFilter
    Else
        Me.Filter = sFilter & " AND " & Me.Filter
    End If
Else
    Me.Filter = sFilter
    Me.FilterOn = True
End If

End Sub
De code maakt gebruik van een extra (verborgen) tekstvak, waar de naam van het object wat je als laatste actief hebt gemaakt in wordt opgeslagen.
Vervolgens wordt het Besturingselement van dat obect, en de Waarde van dat object toegewezen aan een variabele sFilter.
Als laatste wordt gekeken of er al een filter bestaat op het formulier. Als dat zo is, dan wordt dat filter toegevoegd aan het nieuwe filter.

Met onderstaande code wordt het filter weer leeggemaakt.
Code:
Private Sub cmdFilterUit_Click()

    Me.Filter = ""
    Me.FilterOn = False

End Sub
 
Code:
Private Sub Knop252_Click()
sFilter = Me.Filter
''MsgBox Me.Filter
DoCmd.OpenReport "testoverzicht", acViewPreview, , sFilter
end Sub

Deze heb je dan nog steeds nodig natuurlijk om het rapport op te roepen :D


Bedankt!!
Status: Opgelost :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan