Totaal aantal pagina's in een report.

Status
Niet open voor verdere reacties.

BartKramer

Gebruiker
Lid geworden
4 jan 2007
Berichten
7
Ik wil graag diverse reports collated afdrukken, maar daarvoor wil ik het aantal pagina's uit een report weten, in voorbeeld rapport1. Hoe kan ik dit bewerkstellingen. HIeronder een deel van het programma, welke geactiveerd wordt bij het indrukken van een knop. Bijvoorbaat dank voor eventuele oplossingen.
Option Explicit

Function CollateReports(Numpages, RPt1 As String, Rpt2 As String)
Dim MyPageNum As Integer
Dim intPageCount As Integer

For MyPageNum = 1 To intPageCount
DoCmd.SelectObject acReport, RPt1, True
DoCmd.PrintOut acPages, MyPageNum, MyPageNum
DoCmd.SelectObject acReport, Rpt2, True
DoCmd.PrintOut acPages, MyPageNum, MyPageNum
Next MyPageNum

End Function
===============================================
Private Sub Knop0_Click()
On Error GoTo Err_Knop0_Click

Dim stDocName As String
Dim rstOrder As Integer
Dim intPageCount As Integer

'Hoe kan ik de waarde intPageCoount maken, als totaal aantal pagina's van Rapport1?

Print CollateReports(intPageCount, "Rapport1", "Rapport2")

Exit_Knop0_Click:
Exit Sub

Err_Knop0_Click:
MsgBox Err.Description
Resume Exit_Knop0_Click

End Sub
 
kun je dat niet via [Pages] achterhalen wat een report via de wizard gemaakt zelf standaard als voet tekst gebruikt ?
 
Beste zRowix, Ik heb dat geprobeerd, maar het "collatten"/samenvoegen van pagina's kan denk ik alleen in het visual basic deel. Daar lukt het me niet om [pages] als waarde uit een report te krijgen. Er zijn manieren om aantallen te bepalen, nadat je pagina grootte is gedefinieerd, maar dan kan ik alleen het aantal records per pagina bepalen (ik heb dit trouwens niet geprobeerd).

Om uit te leggen wat ik wil; ik het meerdere reports, welke achterelkaar geprint worden, dus Report 1: pag1, pag2,pag3etc, dan Report2: pag1, pag2, pag3 etc.
Ik wil bereiken:
R1Pag1, R2pag1,R3pag1, R1Pag2,R2Pag3,R3:Pag2 etc.

Ik heb dit ook geprobeerd door een nieuw report te maken, en daar de andere reports in te plaatsen, dit lukt deels, alleen dan worden het niet volledige pagina's, en de kop/voetteksten van de rapporten verdwijnen.

Alvast bedankt voor je hulp,
 
Helaas nog geen oplossing

Allen, Helaas heb ik nog steeds geen oplossing voor het beschreven problemen. Ook meerdere reports in een report plaatsen is mij niet gelukt. Als iemand me kan helpen, dan hoor ik het graag.
 
Maar wat is precies de bedoeling want in het "service beurten" sjabloon staat de factuur en deze bestaat uit 1 rapport met 2 rapporten er op.(Dus 3)

Post anders je db en vertel wat het uiteindelijke resultaat moet zijn misschien kan ik je dan meer op weg helpen.
 
Reports collated afdrukken incl. DB

Beste zRowix (en anderen), bij deze een test database (de echte is te groot).

Indien je op knop-0 drukt in het formulier, dan wil ik de reports afgedrukt hebben op de volgende wijze:
1-1; 2-1; 1-2; 2-2; 1-3; 2-3; 1-4; 2-4; 1-5; 2-5.
Als je op knop 1 drukt, dan krijg je de standaard afdrukwijze:
1-1; 1-2; 1-3; 1-4; 1-5; 2-1; 2-2; 2-3; 2-4; 2-5.

De kopteksten zijn verschillend, dus mij lukt het niet om ze in een samengevoegd report te krijgen. De info komt per pagina (en mogen dus niet meerdere records op een pagina staan). Dit maakt het ook lastig om reports samen te voegen.

Alvast bedankt voor de eventuele hulp.
 

Bijlagen

Ik heb er even naar gekeken met deze opbouw begrijp ik nog steeds niet wat je uiteindelijke bedoeling is.

Maar met deze structuur kun je het gevraagde resultaat voor elkaar krijgen door de records te tellen en je rapporten te filter en af te drukken per record,

Code:
    Dim rpt1Count As Integer
    Dim rpt2Count As Integer
    Dim teller As Integer
    Dim rs1 As Recordset
    Dim rs2 As Recordset

    rpt1Count = DCount("[indexId]", "Query1")
    rpt2Count = DCount("[indexId]", "Query2")
    
    If (rpt1Count <> 0) And (rpt2Count <> 0) Then
        If rpt1Count = rpt2Count Then
            
            Set rs1 = CurrentDb.OpenRecordset("Query1")
            Set rs2 = CurrentDb.OpenRecordset("Query2")
            
            rs1.MoveFirst
            rs2.MoveFirst
            
            teller = 0
            
            Do While rpt1Count <> teller 'teller
                DoCmd.OpenReport "Rapport1", acNormal, , "indexId=" & rs1![indexId]
                DoCmd.OpenReport "Rapport2", acNormal, , "indexId=" & rs2![indexId]
                
                rs1.MoveNext
                rs2.MoveNext
                teller = teller + 1
            Loop
            
        Else
            MsgBox ("aantal van de rapporten zijn verschillend")
        End If
    Else
        MsgBox ("een van de 2 rapporten bevat 0 paginas ?")
    End If

Ik heb dit getest en het werkt het doet niets anders als elk keer het rapport opnieuw afdrukken gefiltert op de bladzijde die jij wil hebben.

ik heb index alleen even hernoemd naar indexid want uit mijn hoofd is dit een gereserveerd woord.

misschien kun je er wat mee :confused:
 
Het bepalen van het aantal pagina's van een rapport kun je met behulp van de volgende functie doen:

Public Function fnAantPagRapp(mstrReportName As String) As Integer
Dim rpt As Report

'Openen van het rapport
DoCmd.OpenReport mstrReportName, acViewPreview, , , acHidden

'Bepalen van het aantal pagina's van het rapport
Set rpt = Application.Reports(mstrReportName)
fnAantPagRapp = rpt.Pages
Set rpt = Nothing

'Sluiten van het rapport
DoCmd.Close acReport, mstrReportName
End Function


Is idt wat je bedoeld?
 
Helaas, foutmelding

Heren (naar ik aanneem),

Helaas, ik krijg de volgende foutmelding:
Deze eigenschap of methode wordt niet ondersteund door dit object.

Ik heb nu het volgende onder knop-0:
=========================================================
Option Explicit

Function CollateReports(Numpages, RPt1 As String, Rpt2 As String)
Dim MyPageNum As Integer
Dim intPageCount As Integer
Dim rpt As Report

For MyPageNum = 1 To intPageCount
DoCmd.SelectObject acReport, RPt1, True
DoCmd.PrintOut acPages, MyPageNum, MyPageNum
DoCmd.SelectObject acReport, Rpt2, True
DoCmd.PrintOut acPages, MyPageNum, MyPageNum
Next MyPageNum

End Function

=========================================================
Private Sub Knop0_Click()
On Error GoTo Err_Knop0_Click

Dim stDocName As String
Dim rstOrder As Integer
Dim intPageCount As Integer
Dim MstrDocName As String
Dim rpt As Report

'Openen van het rapport
MstrDocName = "Rapport1"
DoCmd.OpenReport MstrDocName, acViewPreview, , , acHidden

'Bepalen van het aantal pagina's van het rapport
Set rpt = Application.Reports(MstrDocName)
intPageCount = rpt.Pages
Set rpt = Nothing

'Sluiten van het rapport
DoCmd.Close acReport, MstrDocName

'Afdrukken van de rapporten
Print CollateReports(intPageCount, "Rapport1", "Rapport2")

Exit_Knop0_Click:
Exit Sub

Err_Knop0_Click:
MsgBox Err.Description
Resume Exit_Knop0_Click

End Sub
=========================================================

Ik kan in [help] niet iets vinden over "Application.Reports(MstrDocName)" en/of "rpt.Pages". De [help] geeft aan dat er wellicht nog een expressie mist.
NB: Ik heb nooit een cursus Visual Basic gehad. De laatste ervaring welke ik heb is met pascal en Basic! Het kan dus zo zijn dat ik hele basale fouten maak.
 
Laatst bewerkt:
Bart,

Kun je ook aangeven op welke regel je de foutmelding krijgt?

Groet,

Bart
 
Voorbeeld database

Bart,

Hij geeft geen regel-foutmelding. In principe blijft hij hangen in het formulier en er gebeurt verder niets. Als bijlage heb ik de laatste versie toegevoegd.

Bart
 

Bijlagen

@Piekie
Het is niet de bedoeling dat je op deze manier inbreekt in de vragen van anderen.
Als je vragen hebt kun je die als nieuw topic posten, dan kun je reacties verwachten.

Bart,

Je fout zit in de volgende regel:
Print CollateReports(intPageCount, "Rapport1", "Rapport2")

Print is geen VBA opdracht, maar een methode van een object.
CollateReports is een functie in je module

Function CollateReports(Numpages As Integer, RPt1 As String, Rpt2 As String)
Dim MyPageNum As Integer
Dim intPageCount As Integer
Dim rpt As Report

For MyPageNum = 1 To intPageCount
DoCmd.SelectObject acReport, RPt1, True
DoCmd.PrintOut acPages, MyPageNum, MyPageNum
DoCmd.SelectObject acReport, Rpt2, True
DoCmd.PrintOut acPages, MyPageNum, MyPageNum
Next MyPageNum

End Function

Hier moet je een sub van maken:

Sub CollateReports(Numpages As Integer, RPt1 As String, Rpt2 As String)
Dim MyPageNum As Integer
Dim intPageCount As Integer
Dim rpt As Report

For MyPageNum = 1 To intPageCount
DoCmd.SelectObject acReport, RPt1, True
DoCmd.PrintOut acPages, MyPageNum, MyPageNum
DoCmd.SelectObject acReport, Rpt2, True
DoCmd.PrintOut acPages, MyPageNum, MyPageNum
Next MyPageNum

End Sub

De sub kun je dan simpel aanroepen

CollateReports pages, rpt1, rpt2
 
Beste Bart,

Ik heb je aanbevelingen uitgevoerd, en de foutmelding is weg. Maar helaas doet het helemaal niets nu. Knop-0 doet niets, knop-1 print de reports na elkaar.

De opmerking Print collated had ik van de MS website. Ik heb in de bijlage de laatste versie van mijn testdatabase, en een pdf van de informatie van Microsoft. Wellicht wil je er nog eens naar kijken. Het lijkt me een functionaliteit die wel vaker gewenst is.

Mijn gevoel zegt dat het beter is een function collate... te hebben, dan een sub collate... Waarom zou ik niet weten.

Weer alvast iedereen bedankt voor de hulp.
 

Bijlagen

Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan