Subformulier printen vanuit een main-form

Status
Niet open voor verdere reacties.

Risk

Gebruiker
Lid geworden
5 jul 2010
Berichten
275
Forum,

Na enig worstelen is het mij gelukt (met behulp van dit forum) om een formulier te maken en daarin netjes te filteren.

Ik heb de database met een main-form (menuknoppen links en gegevens als subform ernaast) met daarin een sub-form, nu wil ik van het sub-form de geselecteerde record printen.

Plaatste de knop die access maakt in de wizzard en het lukte in de oefendatabase. Ik heb mijn formulier in de database geplaatst en filterde vrolijk door. Perfect. De uitkomsten wilde ik printen. Printresultaat: het volledige scherm.

Wat ik mij niet realiseerde dat ik niet oefende in een main-form.

Het printen hoeft (nog niet) in een report. Het kan ook direct als formulier, de uitkomsten van de filtering zijn voor intern gebruik.

Een knop is voldoende om het formulier zoals opgemaakt te printen. Layout verschilt niet zoveel van de rapportvormen die ik gebruik.

Alles afgezocht helaas geen commando kunnen vinden die ik on_click kan laten uitvoeren.

Wie heeft de oplossing?? (papiervoorraad is bijna op van de probeersels).

Mijn dank

Risk
 
Nooit een formulier afdrukken, tenzij je een schermafdrukje nodig hebt voor ontwikkeldoeleinden. Maak dus, desnoods het meest simpele dat je nodig hebt, altijd een rapport voor afdrukken. De reden is simpel: formulieren zijn bedoeld voor het scherm, en rapporten voor afdrukken.
 
Michel,

Ja dat weet ik, maar het was voor mij als "leek" de simpelste oplossing.

Dan wordt de vraag: hoe zet ik de uitkomsten van de filtering in een rapport. Zie daar soms de meest ingewikkelde oplossingen voor. Die schrikken mij dan weer af.

Heb je een voorbeeldje in jou archief?

Met dank

Risk
 
Je moet de waarde van het formulier 'meenemen' naar het rapport, en dat kan alleen via code. Heel ingewikkeld hoeft dat niet te zijn, want als je het formulier hebt gefilterd kun je het filter letterlijk overzetten naar het rapport. Heb je alleen een record gemarkeerd, dan kun je de waarde meegeven aan het rapport via de variabele OpenArgs, en die variabele bij openen van het rapport gebruiken om het filter te activeren.
Access is geen programma voor watjes, wat dat betreft: als je extra functionaliteit wilt, dan zul je daar iets voor moeten maken, hetzij via macro's, hetzij via VBA. Op het forum zijn wat dat betreft wel genoeg voorbeelden (ook van mijn hand) te vinden; bekijk die dus eerst, zou ik zeggen! Als je in de VBA help naar OpenArgs zoekt, vind je prima voorbeelden.
 
Michel,

Dat Access niet voor watjes is, daar kan ik uit eigen ervaring er nog wel een in het groen aan toevoegen. Dat ik codes nodig heb, ook geen enkele discussie. Dat dat voor de ee nlastiger als voor een ander, ook geen discussie. De ontwikkeling van mijn database gaat continue door. Daarbij ontwikkel je iets en gelijk een andere oplossing of vraag.
Waarom ik mij dan ook moet wenden tot dit door mij hooggeprezen forum is dat ik er niet uitkom. Er liggen hier 3 boeken over Access. De beste Access 2010 inside out met legio voorbeelden. Voor ik mij met een vraag op het forum waag, wees gerust ik heb gelezen, gezocht, geprobeerd en van alles meer. Het heeft mij een kleine 10 uur gekost inmiddels.

Dat er veel oplossingen zijn, prima. Ik geloof dat onmiddellijk. Dan ga ik zoeken op OpenArgs, vind een 71 meldingen en wandel er doorheen, mijn vraag helaas is daar niet beantwoord geworden.

Nogmaals ik weet de oplossing niet, dus als er een tip is die mij kan helpen ben ik meer dan blij.

Met dank als altijd,

Risk
 
Ik twijfel ook niet aan de inspanningen die je al gedaan hebt ;) Mijn probleem is, dat ik niet helemaal helder zie welke werkwijze je zou willen toepassen; het klinkt alsof je vanuit een geselecteerd record met een dubbelklik op dat record een rapport wilt openen van dat record. In zijn simpelste vorm, kun je de geselecteerde waarde uit het subformulier uitlezen, en gebruiken als filter voor het rapport. Dat ziet er dan zo uit:

Code:
Dim CustID As String
    CustID = Me!subfrmOrderDetails.Form!CustomerID.Value
    DoCmd.OpenReport "rptCustomer", acPreview, , "[customerID]='" & CustID & "'"

In dit voorbeeld heb ik een subformulier met de naam subfrmOrderDetails, waarin CustomerID het sleutelveld is. Deze waarde zet ik in een variabele (hoeft overigens niet eens) en daarmee maak ik een WHERE argument voor het commando waarmee het rapport wordt geopend. En dat is alles dat je in beginsel nodig hebt. Omdat in het voorbeeld customerID een tekstveld is, staan er extra quootjes omheen. Bij getallen kunnen die weg.
 
Beste Michel,

Van leek naar kenner communiceren is lastig, zeker via geschreven woord. Waardeer je hulp.

Voor ik verder ga met jou oplossing kwam ik dit tegen: (Knop 405 is even tijdelijke naam)

Code:
Private Sub Knop405_Click()

On Error GoTo Err_Knop405_Click

Dim stDocName As String

stDocName = "Rapport2"
DoCmd.OpenReport stDocName, acViewPreview, , "[Afdeling] = '" & Me![cboAfdeling] & "'"



Exit_Knop405_Click:
Exit Sub

Err_Knop405_Click:
MsgBox Err.Description
Resume Exit_Knop405_Click

End Sub

Ik heb een rapport gemaakt met:

Jaar, Kenteken, Planner, Afdeling, Ladingsoort.


Filter ik op afdeling gaat het prima.

Nu hoe ga ik verder als ik dus op verschillende velden wil filteren of combinaties daarvan. Diverse mogelijkheden geprobeerd, maar helaas. Het lukt niet

Ik probeerde

Code:
DoCmd.OpenReport stDocName, acViewPreview, , "[Jaar] = '" & Me![cboJaar] & "'"
DoCmd.OpenReport stDocName, acViewPreview, , "[Afdeling] = '" & Me![cboAfdeling] & "'"
etc.

Dit is dus niet de oplossing. Dat ligt aan DoCmd etc. Weet helaas (nog) niet een alternatief commando of wat ik kan weglaten.

Ben op weg, maar nog niet helemaal. Zie de finish

Hoop dat je het snapt.

Risk
 
Ik snap eerlijk gezegd niet hoe jouw oplossing werkt voor een record in een subformulier, want dat zou niet zo mogen werken.... De code die je laat zien is in beginsel exact hetzelfde als mijn voorbeeld (de variant die ik niet beschreef: dat je de code niet in een variabele hoeft te zetten), dus aan de techniek ligt het niet :) Maar, zoals gezegd, als je een waarde van een subformulier wilt gebruiken, dan heb je mijn syntax nodig.
Wat jij doet, is het rapport twee keer openen, met twee verschillende variabelen. Dat werkt natuurlijk niet. En dan kom je toch weer bij mijn variant uit, want die is veel makkelijker te maken. Dus, als je het niet erg vindt, hou ik mij aan mijn eigen voorstel :)

Code:
Dim sFilter as String
If Me.cboJaar & "" <> "" Then
     sFilter = "[Jaar] = " & Me.cboJaar 
End If
If Me.cboAfdeling & "" <> "" Then
     If sFilter <>"" Then sFilter = sFilter &  " AND "
     sFilter = "[Afdeling] = '" & Me.cboAfdeling] 
End If

DoCmd.OpenReport stDocName, acViewPreview, , sFilter
 
Michel,

Het werkt. Alle filters gekopieerd. Bouw mijn rapport verder (morgen) en geef je bericht.

Dank, ga tevreden even beneden zitten.

Dank

Risk
 
Michel,

Alles nagelopen en aangepast. Het werkt.

Dank voor de hulp. Hopelijk hebben anderen ook aan deze vraag weer voldoende informatie. Ik wel.

Risk
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan