Printmenu maken met selectievakje

Status
Niet open voor verdere reacties.

Henk Benter

Gebruiker
Lid geworden
13 mei 2010
Berichten
154
Ik heb een accessformulier gemaakt met daarop een knop dat een printmenu opent. Het printmenu bevat een keuzemenu, selectievakjes, om het bijbehorende document te printen. De gebruiker maakt een keuze welke documenten hij wil printen (meerdere selectievaktjes kunnen dus worden geselecteerd). Nadat de selectie is gemaakt drukt de gebruiker op een knop en worden de geselecteerde documenten éé voor één geprint. Overigens de documenten moeten gegevens bevatten van het huidige record in het hoofdformulier.

Wie kan mij helpen met de code onder de knop die ervoor zorgt dat de geselecteerde documenten worden geprint.

Ik had graag mijn voorbeeldbestand willen toevoegen. Helaas is dit niet gelukt. Een afbeelding heb ik wel toe kunnen voegen. Hoop dat dit voldoende is.

Knipsel.JPG
 
Om een db te uploaden kun je die het beste eerst comprimeren en dan zippen. Is de zip te groot, hernoem hem dan naar .xlsb, dan heb je meer speelruimte. Wij hernoemen hem dan uiteraard weer terug naar .zip.

Ik zou het zelf anders doen, niet met selectievakjes maar met een Keuzelijst die je instelt op Meervoudig. De werking is min of meer hetzelfde voor de gebruiker (die moet nog steeds de af te drukken rapporten selecteren) maar het selecteren is intuïtiever, en (belangrijkste voordeel) het inlezen van de rapporten gebeurt automatisch. Haal je rapporten weg, of zet je er rapporten bij, dan hoef je helemaal niks te veranderen aan je code. En dat moet je nu wel.
Stel dat je de selectievakjes wegmietert (is ook voor het uitlezen van belang) dan vul je de keuzelijst met deze code:

Code:
Private Sub Form_Load()
Dim obj As AccessObject, dbs As Object
Dim sList As String
    Set dbs = Application.CurrentProject
    For Each obj In dbs.AllReports
        If Not sList = vbNullString Then sList = sList & "; "
        sList = sList & obj.Name
    Next obj
    With Me.lstRapporten
        .RowSourceType = "Value list"
        .RowSource = sList
        .Requery
    End With
End Sub
Deze haalt dus uit de AllReports collectie de namen van de rapporten op, en zet ze netjes in de keuzelijst lstRapporten.
Vervolgens wil je die selectie nog afdrukken, en dat doe je door de geselecteerde items van de keuzelijst weer uit te lezen en af te drukken. Ik doe dat in 2 stappen, maar dat kan ook in één routine zoals in deze code.

Code:
Private Sub cmdAfdrukken_Click()
Dim itm As Variant
    With Me.lstRapporten
        If .ItemsSelected.Count >= 1 Then
            For Each itm In .ItemsSelected
                DoCmd.OpenReport .ItemData(itm), acViewNormal
            Next itm
        End If
    End With
End Sub
 
Dag Octafish, Dank voor je reactie. Ben met jou code aan de gang gegaan in mijn voorbeelddatabase. Ik vermoed dat ik niet helemaal begrijp wat jij bedoeld. Wat heb ik gedaan? Ik heb op het formulier frmprintmenu een keuzelijst ingevoegd. De eigenschap van dit besturingselement heb ik in het tabblad overige bij meervoudige selectie op uitgebreid gezet. In het tabblad gebeurtenis van het formulier frmprintmenu heb ik in een gebeurtenisprocedure "bij laden" jou code geplakt zoals onderstaand

Wanneer ik het formulier op heb geslagen en daarna open krijg ik een compileerfout op me.lstrapporten. Ik vermoed dat ik iets heb overgeslagen of iets moet wijzigen in de onderstaande code. Wat doe ik hier niet goed? Moet ik nog wat doen met de aangemaakte rapporten of iets dergelijks? Dank voor je bericht.

Code:
Private Sub Form_Load()
Dim obj As AccessObject, dbs As Object
Dim sList As String
    Set dbs = Application.CurrentProject
    For Each obj In dbs.AllReports
        If Not sList = vbNullString Then sList = sList & "; "
        sList = sList & obj.Name
    Next obj
    With Me.lstRapporten
        .RowSourceType = "Value list"
        .RowSource = sList
        .Requery
    End With
End Sub
 
Als je keuzelijsten inderdaad de naam lstRapporten heeft, dan zou de code moeten werken want het is allemaal standaard Access wat er gebruikt wordt; je hebt dus niet eens extra bibliotheken nodig. Heb je Me.lstRapporten m.b.v. IntelliSense gemaakt, of letterlijk zo overgetypt? Want de IntelliSense geeft, als je keuzelijst anders heet, dan de naam niet automatisch aan en dan weet je eigenlijk al gelijk waar het probleem zit.
 
Ja, dat was hem. Ik had de keuzelijst niet de naam lstrapporten gegeven. Heb hem nu werkend. Kan weer vooruit. Dank je en goed weekend.
 
Hallo Octafish, Even voorbordurend op het vorige. De rapporten die geprint dienen te worden zijn rapporten die onder de groep KAM formulieren vallen. Ik weet niet of het mogelijk is om vanuit alle rapporten alleen die rapporten te laten zien in de keuzelijst die onder de groep KAM formulieren vallen. Nu zie ik alle rapporten verschijnen in het keuzemenu. Dank voor je bericht.
 
Je zou, als de rapporten een herkenbare naam hebben, die eerst kunnen filteren voordat je ze in de lijst zet. Met zoiets:
Code:
Private Sub Form_Load()
Dim obj As AccessObject, dbs As Object
Dim sList As String
    Set dbs = Application.CurrentProject
    For Each obj In dbs.AllReports
        If Left(obj.Name,3) = "KAM" Then
             If Not sList = vbNullString Then sList = sList & "; "
             sList = sList & obj.Name
        End If
    Next obj
    With Me.lstRapporten
        .RowSourceType = "Value list"
        .RowSource = sList
        .Requery
    End With
End Sub
 
Octafisch, je bent een held. Op deze wijze kan ik mijn rapporten keurig indelen naar FINancieel, KAM, OHW, enz.. Nogmaals dank.
 
Graag gedaan :). Mag je de vraag op <Opgelost> zetten.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan